solaris recv无限接收

时间:2013-05-08 11:28:49

标签: c solaris recv

运行此代码时,响应不会出现。 Soket处于连接状态。 所以永远处于待机状态的返回值而不是没有。 请帮帮我。

...
sock = socket(PF_INET, protocol, 0);
...
char recv_data[102400] = {0,};

while ((size=recv(sock,recv_data,102400-1, 0)) > 0){
    // some code
}
...
  

OS:SunOS xname 5.10 Generic_147440-12 sun4u sparc   SUNW,太阳火-15000

1 个答案:

答案 0 :(得分:1)

我猜测套接字正在阻塞。

int noblock(int fd)
{
      int flags = fcntl(fd, F_GETFL, 0);
      if (flags < 0) return 0;
      flags = (blocking) ? (flags&~O_NONBLOCK) : (flags|O_NONBLOCK);
      return (fcntl(fd, F_SETFL, flags) == 0) ? 1 : 0;
}

使用此选项可将套接字设置为非阻塞。如果没有要读取的数据,recv()将返回-1 并将errno设置为EWOULDBLOCK

查看这些更改是否会让您超越当前的问题。

你真的应该检查你所有电话的回复代码