龙***子
SO_RCVTIMEO和SO_SNDTIMEO ,它们分别用来设置socket接收数据超时时间和发送数据超时时间。 因此,这两个选项仅对与数据收发相关的系统调用有效,这些系统调用包括:send, sendmsg, recv, recvmsg, accept, connect 。 这两个选项设置后,若超时, 返回-1,并设置errno为EAGAIN或EWOULDBLOCK. 其中connect超时的话,也是返回-1, 但errno设置为EINPROGRESS
x***g
m_SockFd = socket(AF_INET, SOCK_STREAM, 0); if (m_SockFd==-1) { LOG4CPLUS_ERROR(logger, "opening stream socket ," <<__FILE__ <<" , "<<__LINE__ ); return 1; } // 绑定网络路由,eth0 or wlan0 struct ifreq struIR; char sDev[16]={0}; if(GlobalConfig::IsHasGateWay("eth0") == true){ strcpy(sDev,"eth0"); LOG4CPLUS_WARN(logger, "tcpclient SO_BINDTODEVICE 1sDev = " << sDev); } else if(GlobalConfig::IsHasGateWay("wlan0") == true){ strcpy(sDev,"wlan0"); LOG4CPLUS_WARN(logger, "tcpclient SO_BINDTODEVICE 2sDev = " << sDev); } LOG4CPLUS_WARN(logger, "tcpclient SO_BINDTODEVICE sDev = " << sDev); if(strstr(sDev,"eth0") || strstr(sDev,"wlan0")){ strncpy(struIR.ifr_name, sDev, IFNAMSIZ); if (setsockopt(m_SockFd, SOL_SOCKET, SO_BINDTODEVICE, (char *)&struIR, sizeof(struIR)) < 0){ perror("setsockopt SO_BINDTODEVICE error\n"); LOG4CPLUS_WARN(logger, "tcpclient SO_BINDTODEVICE error\n"); }