1
0
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:
Victor Stewart 2020-05-21 19:36:54 -04:00 committed by GitHub
parent 4af46ce3f3
commit c8e65baccf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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)