关闭

socket套接字选项和模式

标签: socketioctlsockefcntlsetsockopt
649人阅读 评论(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网站的观点或立场
    个人资料
    • 访问:22584次
    • 积分:674
    • 等级:
    • 排名:千里之外
    • 原创:44篇
    • 转载:0篇
    • 译文:0篇
    • 评论:29条
    联系方式

    公司:深信服科技股份有限公司


    所在地:中国-广东省-深圳市


    QQ交流群:165650716


    文章分类