当前位置: 技术问答>linux和unix
select 问题
来源: 互联网 发布时间:2016-12-11
本文导语: 1, 在 server 端, 监听 127.0.0.1:9798 2, 在 client端, 建立一个 sock_fd -- cli_fd, 然后 connect 127.0.0.1:9798, 成功返回 connect(cli_fd, ...); 3, 此时在 server 端, 由 accept() 返回一个 sock_fd --- ser_fd 4, ...
1, 在 server 端, 监听 127.0.0.1:9798
2, 在 client端, 建立一个 sock_fd -- cli_fd, 然后 connect 127.0.0.1:9798, 成功返回
connect(cli_fd, ...);
3, 此时在 server 端, 由 accept() 返回一个 sock_fd --- ser_fd
4, 在server端
FD_ZERO( &readfds);
FD_SET( ser_fd, &readfds);
select( FD_SETSIZE, &readfds, (fd_set *)0, (fd_set *)0, (struct timeval *)0);
此时server 阻塞
5, 在client端循环 write(cli_fd, buf, 10)
为什么server端还是一直阻塞, 我个人理解应该是有数据可读了?
困扰久, 请朋友不以浅薄, 多加指点, 谢谢。
|
从你描述的流程来看,没有问题
你可以试试去掉select,直接read(ser_fd..)能否返回数据
如果可以返回数据,那说明你的select检测有问题
你可以试试去掉select,直接read(ser_fd..)能否返回数据
如果可以返回数据,那说明你的select检测有问题
|
把你select相关的部分贴出来看看?
试试select( ser_fd+1, &readfds, (fd_set *)0, (fd_set *)0, (struct timeval *)0);
试试select( ser_fd+1, &readfds, (fd_set *)0, (fd_set *)0, (struct timeval *)0);