socket编程需要注意的问题

1. connect() TCP(SOCK_STREAM)是连接到服务端,UDP(SOCK_DGRAM)是把本地地址端口和服务端的对应起来,并没有建立连接
    connect前也可以用bind()绑定本地地址端口到clientfd,bind的参数是本地地址端口;不使用bind则会自动绑定个

2. 如果是UDP,则可以不用connect指定目标地址,直接用sendto就可以,recvfrom前必须绑定个地址(connect,bind,sendto都可以绑定本地地址端口)
    TCP使用sendto前必须要connect
    若同时使用connect和sendto,若2个的目标地址不一样可能会引起错误或数据包丢失

3.accept recvfrom getsockname最后一个参数 fromlen 要给个初始值,否则第一个连接(端口收到的第一个数据包)的发送方IP地址总是0.0.0.0,端口也是0,如:
    fromlen = sizeof(from); recvfrom(...(struct sockaddr *)&from, &fromlen);

4.SO_REUSEADDR 端口重用,否则关闭后马上再次打开bind会失败 ,有的不支持SO_REUSEPORT(netstat -tuan 端口显示TIME_WAIT,1-4min)
    int opt=1; setsockopt(sckfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值