mirror of
https://github.com/stefanocasazza/ULib.git
synced 2025-09-28 19:05:55 +08:00
Update socket.cpp
This commit is contained in:
parent
4af46ce3f3
commit
c8e65baccf
|
@ -1173,6 +1173,7 @@ ok: setLocal();
|
||||||
U_RETURN(false);
|
U_RETURN(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_EPOLL_WAIT
|
||||||
bool USocket::beginAsynchronousConnect(const UString& server, unsigned int iServPort)
|
bool USocket::beginAsynchronousConnect(const UString& server, unsigned int iServPort)
|
||||||
{
|
{
|
||||||
U_TRACE(1, "USocket::beginAsynchronousConnect(%V,%u)", server.rep, iServPort)
|
U_TRACE(1, "USocket::beginAsynchronousConnect(%V,%u)", server.rep, iServPort)
|
||||||
|
@ -1199,28 +1200,37 @@ bool USocket::beginAsynchronousConnect(const UString& server, unsigned int iServ
|
||||||
3) A TCP connection to 127.0.0.1 (localhost).
|
3) A TCP connection to 127.0.0.1 (localhost).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
switch (U_FF_SYSCALL(connect, "%d,%p,%d", getFd(), (sockaddr*)cServer, cServer.sizeOf()))
|
int result = U_FF_SYSCALL(connect, "%d,%p,%d", getFd(), (sockaddr*)cServer, cServer.sizeOf());
|
||||||
{
|
|
||||||
case 0:
|
if ( (result == -1 && errno == EINPROGRESS) || (result == 0 && finishAsynchronousConnect()) ) U_RETURN(true);
|
||||||
{
|
|
||||||
iState = CONNECT;
|
_close_socket();
|
||||||
U_RETURN(true);
|
|
||||||
}
|
|
||||||
case -1:
|
|
||||||
{
|
|
||||||
if (errno == EINPROGRESS) U_RETURN(true);
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
_close_socket();
|
|
||||||
U_RETURN(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
U_RETURN(false);
|
U_RETURN(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool USocket::finishAsynchronousConnect()
|
||||||
|
{
|
||||||
|
setBlocking();
|
||||||
|
|
||||||
|
uint32_t error = U_NOT_FOUND, tmp = sizeof(uint32_t);
|
||||||
|
|
||||||
|
(void)getSockOpt(SOL_SOCKET, SO_ERROR, (void*)&error, tmp);
|
||||||
|
|
||||||
|
if (error == 0)
|
||||||
|
{
|
||||||
|
iState = CONNECT;
|
||||||
|
U_RETURN(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
iState = -(errno = error);
|
||||||
|
U_RETURN(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int USocket::send(const char* pData, uint32_t iDataLen)
|
int USocket::send(const char* pData, uint32_t iDataLen)
|
||||||
{
|
{
|
||||||
U_TRACE(1, "USocket::send(%p,%u)", pData, iDataLen)
|
U_TRACE(1, "USocket::send(%p,%u)", pData, iDataLen)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user