一 点睛
把套接字设为非阻塞模式后,很多Linsock函数会立即返回,但并不意味着操作已经结束。
二 设置套接字为非阻塞套接字
1 代码
#include <sys/socket.h>
#include <arpa/inet.h>
#include <assert.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/time.h>
int setnonblocking( int fd ) //自定义函数,用于设置套接字为非阻塞套接字
{
int old_option = fcntl( fd, F_GETFL );
int new_option = old_option | O_NONBLOCK;
fcntl( fd, F_SETFL, new_option ); //设置为非阻塞套接字
return old_option;
}
int main( int argc, char* argv[] )
{
int sock = socket( PF_INET, SOCK_STREAM, 0 );
assert( sock >= 0 );
int old_option = fcntl( sock, F_GETFL );
if(0==(old_option & O_NONBLOCK))
printf("now socket is BLOCK mode\n"); //0 is block mode