setsockopt

setsockopt

setsockopt()设置socket描述符的选项

SO_REUSEADDR为1,表示允许创建端口号相同但IP地址不同的多个socket描述符。

getsockopt,setsockopt - get and set options on sockets

#include <sys/types.h>

#include <sys/socket.h>

int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);

int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);

1)服务器端允许占用尚未完全释放的端口:服务器进程关闭后,再启动bind错误,因占用同一端口(与连接socket)需等待2MSL时间。修改该选项,可立即重启服务器程序。

int opt=1;

setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));

2)检测连接状态,在tcp连接的一瞬间可检测到。

int check_tcp_connect(int sd, int sec)
{
    int error = -1, len;
    int ret = 0;
    struct timeval tm;

    len = sizeof(int);
    fd_set set;
    tm.tv_sec = sec;
    tm.tv_usec = 0;
    FD_ZERO(&set);
    FD_SET(sd, &set);
    if(select(sd + 1, NULL, &set, NULL, &tm) > 0)
    {   
        getsockopt(sd, SOL_SOCKET, SO_ERROR, &error, (socklen_t *)&len);
        if(error == 0)
        {   
            ret = 1;
        }   
        else
        {
            printf( "Warnning: Tcp connect error:%d\n", error);
            ret = 0;
        }
    }
    else
    {
        printf("Warnning: Wait TCP connect timeout!\n");
        ret = 0;
    }
    return ret;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值