int oldfd = fcntl(sockfd,F_GETFL,0);
    int newfd = oldfd|O_NONBLOCK;
    ret = fcntl(sockfd,F_SETFL,newfd);

这里要注意是F_GETFL 而不是F_GETFD

如果写错了,fcntl的返回值并不会报错,但是socket并不会被设置为非阻塞模式。这种错误很难发现。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注