请问:最快最有效的 connect() 方法
请教:最快最有效的 connect() 方法。
我尝试了
1. set socket non-blocking,
connect()
select()
2. event = WSACreateEvent()
WSAEventSelect(sock, event)
...
WaitForSingleObject()
第一种效率没有第二种高,但是安全。
第二种好象有时候有错误的返回, 因为我在连接之后调用 wsasend(), 有时成功,有时竟然返回 10057!!--何解?
谁能告诉我又快又安全的方法,谢谢了!
------解决方案--------------------
用第一中,系统的负担比较小
------解决方案--------------------
你的第2种方法不是标准的方法吧。这样
event = WSACreateEvent()
WSAEventSelect(sock, event)
index = WSAWaitForMutipleEvents(...);
我想既然用WSACreateEvent创建对象,就应该用WSAWaitForMutipleEvents来判断对象是否被激活
然后调用WSAEnumNetworkEvents察看具体事件
------解决方案--------------------
关于最快的connect函数。
我认为没有最快的connect函数,connect函数内部是 tcp3路握手的建立,而tcp3路握手的时间长短是由底层tcp/ip协议栈来决定的。
我觉得一个block 的connect和一个non block的connect在连接成功的情况下时间基本上是相同的,当然non block可以connect设置超时。
我想你是不是想问,短时间内建立很多个socket 并且connect?
可以用 阻塞connect+多线程
非阻塞connect+select+单线程|多线程
单独比较 non-blocking connect和WSAEventSelect是不是没有太大的意义?
我尝试了
1. set socket non-blocking,
connect()
select()
2. event = WSACreateEvent()
WSAEventSelect(sock, event)
...
WaitForSingleObject()
第一种效率没有第二种高,但是安全。
第二种好象有时候有错误的返回, 因为我在连接之后调用 wsasend(), 有时成功,有时竟然返回 10057!!--何解?
谁能告诉我又快又安全的方法,谢谢了!
------解决方案--------------------
用第一中,系统的负担比较小
------解决方案--------------------
你的第2种方法不是标准的方法吧。这样
event = WSACreateEvent()
WSAEventSelect(sock, event)
index = WSAWaitForMutipleEvents(...);
我想既然用WSACreateEvent创建对象,就应该用WSAWaitForMutipleEvents来判断对象是否被激活
然后调用WSAEnumNetworkEvents察看具体事件
------解决方案--------------------
关于最快的connect函数。
我认为没有最快的connect函数,connect函数内部是 tcp3路握手的建立,而tcp3路握手的时间长短是由底层tcp/ip协议栈来决定的。
我觉得一个block 的connect和一个non block的connect在连接成功的情况下时间基本上是相同的,当然non block可以connect设置超时。
我想你是不是想问,短时间内建立很多个socket 并且connect?
可以用 阻塞connect+多线程
非阻塞connect+select+单线程|多线程
单独比较 non-blocking connect和WSAEventSelect是不是没有太大的意义?