From 6cde6beba788ca5c41f14d0ae6fd98386ef70080 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 10 Apr 2007 21:21:36 +0000 Subject: [PATCH] Fixed several issues pointed out by Olivier "Methe" Milla. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20645 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/network/libnetapi/NetEndpoint.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/kits/network/libnetapi/NetEndpoint.cpp b/src/kits/network/libnetapi/NetEndpoint.cpp index df1fdf67b3..a9e501ef46 100644 --- a/src/kits/network/libnetapi/NetEndpoint.cpp +++ b/src/kits/network/libnetapi/NetEndpoint.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2002-2006, Haiku, Inc. All Rights Reserved. + * Copyright 2002-2007, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ @@ -216,8 +216,8 @@ int BNetEndpoint::SetOption(int32 option, int32 level, const void* data, unsigned int length) { - if (fSocket < 0) - return B_ERROR; + if (fInit < B_OK) + return fInit; if (setsockopt(fSocket, level, option, data, length) < 0) { fLastError = errno; @@ -297,6 +297,9 @@ BNetEndpoint::Close() status_t BNetEndpoint::Bind(const BNetAddress& address) { + if (fInit < B_OK) + return fInit; + struct sockaddr_in addr; status_t status = address.GetAddr(addr); if (status != B_OK) @@ -316,6 +319,7 @@ BNetEndpoint::Bind(const BNetAddress& address) } if (addr.sin_addr.s_addr == 0) { + // TODO: does this still apply? // Grrr, buggy getsockname! char hostname[MAXHOSTNAMELEN]; gethostname(hostname, sizeof(hostname)); @@ -340,6 +344,9 @@ BNetEndpoint::Bind(int port) status_t BNetEndpoint::Connect(const BNetAddress& address) { + if (fInit < B_OK) + return fInit; + sockaddr_in addr; if (address.GetAddr(addr) != B_OK) return B_ERROR; @@ -353,6 +360,7 @@ BNetEndpoint::Connect(const BNetAddress& address) socklen_t addrSize = sizeof(addr); if (getpeername(fSocket, (sockaddr *) &addr, &addrSize) < 0) { Close(); + fLastError = errno; return B_ERROR; } @@ -372,6 +380,9 @@ BNetEndpoint::Connect(const char *hostname, int port) status_t BNetEndpoint::Listen(int backlog) { + if (fInit < B_OK) + return fInit; + if (listen(fSocket, backlog) < 0) { Close(); fLastError = errno; @@ -408,8 +419,8 @@ BNetEndpoint::Accept(int32 timeout) endpoint->fPeer.SetTo(addr); if (getsockname(socket, (struct sockaddr *)&addr, &addrSize) < 0) { - endpoint->Close(); delete endpoint; + fLastError = errno; return NULL; }