2012-05-11 19 views
2

我想减少套接字:连接将查找一个IP /端口连接到允许的timeOut时间?在一些像Netgear这样的使用IP 10.0.0.x的网络路由器上,超时只需不到一秒的时间。套接字:连接将花费2分钟时间寻找IP在它之前。如何减少这段时间?

注:“选择”是后

host = gethostbyname("xxx");//invalid IP, 

memcpy(&(sin.sin_addr), host->h_addr, host->h_length); 
sin.sin_family = host->h_addrtype; 
sin.sin_port = htons(4000); 

s = socket(AF_INET, SOCK_STREAM, 0); 
hConnect = connect(s, (struct sockaddr*)&sin, sizeof(sin));//sits here for 2 minutes before moving on to the next line of code 

bConn = 0;// no connect 
if (hConnect == 0) { 
    bConn = 1;// connect made 
} 

THX

+0

您使用什么操作系统连接()

  • 使用select()?代码的其余部分在哪里,我需要看到比这更多的一点。你能有点模糊吗?什么是问题? – lukecampbell

  • +1

    这里有一个有趣的异步方法:http://stackoverflow.com/q/1062035/694576 – alk

    +0

    我正在使用一个标准C库...这在PC或MAC或iPhone上重复 – jdl

    回答

    3

    设置插座非阻塞调用connect()之前,然后做一个select()poll()上找出去的任何事件在它上面。

    注意:使用此设置,你会得到从connect()errno的情况下被设置为EINPROGRESS一个非零返回connect()回报,而不必连接,但仍试图做的。

    请参阅connect()手册页的ERRORS部分了解更多信息。

    +1

    是的,你也可以通过'setsockopt )'但不使用'O_NONBLOCK's来设置非阻塞标志,但它的入口值是'〜O_NONBLOCK' ... – alk

    1

    标准的方式做,这是两个步骤:

    1. 与O_NONBLOCK与超时
    相关问题