日期:2014-05-16  浏览次数:20658 次

epoll + socket接收数据长度问题
Hi,我现在使用epoll + sockek实现一个RPC的调用,发送和接收都是用一个while循环来实现的。
想要实现的是:发送端发送数据时,在包头里加上数据包长度,接收端可以先解析出来包头,知道具体要接收的数据大小,申请空间,供后面接收数据使用。
现在的问题是,我可以把包头+数据作为一个包发送出去,接收端要怎么接收解析包头呢?比如接收端每次接收的长度为1024*4字节,接受一次后可能包头和数据都接收到了,怎么才能只接收包头呢?
本人刚接触socket,希望各位大侠多多指点,谢谢!

------解决方案--------------------
发送端把包头+数据一次性发送,接收端仍然可以分多次接收,第一次收包头,根据包头中数据大小收数据
至于缓冲区,可以用很多办法,比如可以在一个连接中使用同一个缓冲区,接收数据大于该缓冲区的时候就realloc缓冲区;更进一步就可以不释放这些缓冲区,而是在连接结束的时候放入缓冲区池,需要缓冲区的时候先从缓冲区池获取。。。
------解决方案--------------------
查一下MSG_PEEK。