设置非阻塞
//方法一
int flags;
flags = fcntl(fd, F_GETFL, NULL);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
//方法二
int flag = 1;
ioctl(fd, FIONBIO, &flag);
推荐使用方法一,因为先用flags保存了当前的属性,再附加了非阻塞新属性,更安全
设置SO_KEEPALIVE
int flags = 1;
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void*)&flags, sizeof(flags));
设置SO_REUSEADDR(这个注意要在bind之前设置)
int flags = 1;
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void*) &flags,sizeof(flags));
设置FD_CLOEXEC(只针对linux的fork)
int flags;
flags = fcntl(fd, F_GETFD, NULL);
fcntl(fd, F_SETFD, flags | FD_CLOEXEC);