或者
问答详情页顶部banner图
您的位置:首页 >推广 > 其他 > 其他 > linux socket 设置从哪个网络设备发送数据 SO

linux socket 设置从哪个网络设备发送数据 SO

提问者:宝岛眼镜  |   分类:其他  |   浏览70次  |   悬赏分:5积分 2017-03-24 09:39:29

我要回答

提 交

匿名

  • 龙***子

    SO_RCVTIMEO和SO_SNDTIMEO ,它们分别用来设置socket接收数据超时时间和发送数据超时时间。 因此,这两个选项仅对与数据收发相关的系统调用有效,这些系统调用包括:send, sendmsg, recv, recvmsg, accept, connect 。 这两个选项设置后,若超时, 返回-1,并设置errno为EAGAIN或EWOULDBLOCK. 其中connect超时的话,也是返回-1, 但errno设置为EINPROGRESS

    2017-03-24 16:06:11
    评论0  |   0
  • 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"); }

    2017-03-24 10:06:59
    评论0  |   0
问答详情中间banner