当前位置: 技术问答>linux和unix
liunux socket 接受数据有大小限制么?
来源: 互联网 发布时间:2015-10-25
本文导语: 各大侠: 俺有一个在linux下socket客户程序,访问别人滴服务后, 给俺传过来业务数据< 今天突然传了个量较大的< 我的缓冲区20k ,却只能收到2896字节 ,有哪位大侠知道...
各大侠:
俺有一个在linux下socket客户程序,访问别人滴服务后,
给俺传过来业务数据<
今天突然传了个量较大的<
我的缓冲区20k ,却只能收到2896字节 ,有哪位大侠知道请帮下忙,谢谢
socket类型
socket(AF_INET,SOCK_STREAM,0))
有人怀疑是linux 防火墙的问题,我用setup把它关了还这样,55
俺有一个在linux下socket客户程序,访问别人滴服务后,
给俺传过来业务数据<
今天突然传了个量较大的<
我的缓冲区20k ,却只能收到2896字节 ,有哪位大侠知道请帮下忙,谢谢
socket类型
socket(AF_INET,SOCK_STREAM,0))
有人怀疑是linux 防火墙的问题,我用setup把它关了还这样,55
|
从socket读最好用循环:
int read_done = 0;
while (read_done == 0) {
read
if(得到结束标志) exit
}
那个结束标志可以是自己定义的字符,也可以是达到字节数,或者对方关闭socket(此时read返回-1)
int read_done = 0;
while (read_done == 0) {
read
if(得到结束标志) exit
}
那个结束标志可以是自己定义的字符,也可以是达到字节数,或者对方关闭socket(此时read返回-1)
|
如果你的输出数据大于输出缓冲区的最大值,那么数据包会被分成多次发送。
|
TCP一次收不全就反复调用recv呗
|
一次读取的数据量跟本机socket缓冲有关,一次写的数据量跟对端socket缓冲有关。
有时候读写失败(read、write返回值-1)并不一定就是出错了,可能只是对方缓冲满了,这样的话就需要继续读写。(可以判断read、write返回后的错误代码,一般可能是EAGAIN、EINTR之类的)
有时候读写失败(read、write返回值-1)并不一定就是出错了,可能只是对方缓冲满了,这样的话就需要继续读写。(可以判断read、write返回后的错误代码,一般可能是EAGAIN、EINTR之类的)
|
多读几次,直到读到指定大小或者结束标志为止。
|
recv有收到数据的长度,反复收直到收到的数据到你需求的长度就可以了
注意反复收的时候要修改buffer的指针位置
注意反复收的时候要修改buffer的指针位置
|
把你的读代码贴出来
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。