Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Ako nastavit timeout a dostat rychlejsi return WSAConnectByName

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Ako nastavit timeout a dostat rychlejsi return WSAConnectByName

Autor: Honza Havelka

20:18:10 22.06.2010

veronisoft77 Napsal:
-------------------------------------------------------
> Takto to mam spravene. Ak konektuej pocitac ktory
> nieja na sieti zapnuty je time out je 20 s nie 3s.
> neviete preco?

Bez mučení přiznávám, že tohle fakt nevím.

Citovat příspěvek

 

Re: Ako nastavit timeout a dostat rychlejsi return WSAConnectByName

Autor: veronisoft77

20:02:01 22.06.2010

Takto to mam spravene. Ak konektuej pocitac ktory nieja na sieti zapnuty je time out je 20 s nie 3s. neviete preco?

SOCKET ConnSocket;
CString PortName,NodeName;
NodeName = CString( strHost );
PortName.Format( _T("%u"), Port);
int ipv6only = 0;
int iResult;
BOOL bSuccess;
SOCKADDR_STORAGE LocalAddr = {0};
SOCKADDR_STORAGE RemoteAddr = {0};
DWORD dwLocalAddr = sizeof(LocalAddr);
DWORD dwRemoteAddr = sizeof(RemoteAddr);

ConnSocket = socket(AF_INET6, SOCK_STREAM, 0);
if (ConnSocket == INVALID_SOCKET){

return BOX_NET_ERROR;
}

iResult = setsockopt(ConnSocket, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&ipv6only, sizeof(ipv6only) );

if (iResult == SOCKET_ERROR)
{
closesocket(ConnSocket);
return BOX_NET_ERROR;
}
timeval tmv;
tmv.tv_sec = 3;
tmv.tv_usec = 0;

bSuccess = WSAConnectByName( ConnSocket, NodeName.GetBuffer( NodeName.GetLength()),
PortName.GetBuffer(PortName.GetLength() ), &dwLocalAddr,
(SOCKADDR*)&LocalAddr,
&dwRemoteAddr,
(SOCKADDR*)&RemoteAddr,
&tmv,
NULL);
int wsaret = WSAGetLastError();

NodeName.ReleaseBuffer();
PortName.ReleaseBuffer();

closesocket(ConnSocket);

Citovat příspěvek

 

Re: Ako nastavit timeout a dostat rychlejsi return WSAConnectByName

Autor: Honza Havelka

19:41:07 22.06.2010

veronisoft77 Napsal:
-------------------------------------------------------
> Pouzivam WSAConnectByName na dostanie TCP/IP
> spojenia. Akonahle vsak IP nieje specifikovana
> alebo kabel je odpojeny return WSAConnectByName je
> prilis dlhy. Ako dostanem kratsi return time nez
> je vo funcii pouzity?

Pokud je splněno dále uvedené tak si nastav kratší timeout v předposledním parametru při volání WSAConnectByName. Pokud to splněno není tak není vhodné používat WSAConnectByName.

http://msdn.microsoft.com/en-us/library/ms741557(VS.85).aspx
[quote]timeout
The time, in milliseconds, to wait for a response from the remote application before aborting the call.[/quote]

Mělo by být splněno:

[quote]WSAConnectByName has limitations:

It works only for connection-oriented sockets, such as those of type SOCK_STREAM. The function does not support overlapped I/O or non-blocking behavior. WSAConnectByName will block even if the socket is in non-blocking mode...

The RemoteAddress and the LocalAddress parameters point to a SOCKADDR structure, which is a generic data type. When WSAConnectByName is called, it is expected that a socket address type specific to the network protocol or address family being used will actually be passed in these parameters...[/quote]

Pokud to není splněno, tak není vhodné používat WSAConnectByName.

Citovat příspěvek

 

Ako nastavit timeout a dostat rychlejsi return WSAConnectByName

Autor: veronisoft77

11:12:10 22.06.2010

Pouzivam WSAConnectByName na dostanie TCP/IP spojenia. Akonahle vsak IP nieje specifikovana alebo kabel je odpojeny return WSAConnectByName je prilis dlhy. Ako dostanem kratsi return time nez je vo funcii pouzity?

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: