当前位置: 技术问答>linux和unix
请教: read一个socket, read返回需要多长时间?
来源: 互联网 发布时间:2015-12-19
本文导语: read一个socket, 假设read一直读不到数据的话, 它是否会一直 往那read, 是否会超时, 返回需要多长时间? | 如果read没有数据可读,会一直阻塞下去,直到有数据可读,或者返回错误. | ...
read一个socket, 假设read一直读不到数据的话, 它是否会一直
往那read, 是否会超时, 返回需要多长时间?
往那read, 是否会超时, 返回需要多长时间?
|
如果read没有数据可读,会一直阻塞下去,直到有数据可读,或者返回错误.
|
默认是等待有数据出现。
可以 通过select配置其反应。
可以 通过select配置其反应。
|
如果有数据就应该小于1毫秒
|
建议搂住读一下,rechard stevens的 unix网络编程 里面对这个问题有很详细的解释
|
楼上所言极是。
|
如果不设套接字的属性(读超时)的话,如果没有数据,则默认一直阻塞,
如果设置,则过超时时间后,就返回-1.
struct timeval recv_timeval;
s = socket(AF_INET, SOCK_STREAM, 0);
recv_timeval.tv_sec = 0;
recv_timeval.tv_usec = 500;
setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &recv_timeval, sizeof(recv_timeval));
如果设置,则过超时时间后,就返回-1.
struct timeval recv_timeval;
s = socket(AF_INET, SOCK_STREAM, 0);
recv_timeval.tv_sec = 0;
recv_timeval.tv_usec = 500;
setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &recv_timeval, sizeof(recv_timeval));