关闭

socket套接字选项和模式

标签: socketioctlsockefcntlsetsockopt
726人阅读 评论(0) 收藏 举报
分类:

设置非阻塞

windows的做法:
u_long nonblocking = 1;
ioctlsocket(fd, FIONBIO, &nonblocking);

linux的做法:
方法一
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);
0
3

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场