Overview
Comment: | Add of_getsockname() and make use of it
of_getsockname() calls getsockname() after acquiring a mutex. This is |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
f18615e0575ddb9faf8c54c4cb2f9f84 |
User & Date: | js on 2015-02-18 22:56:46 |
Other Links: | manifest | tags |
Context
2015-02-19
| ||
00:08 | OFDictionary_hashtable: Use release in dealloc check-in: ca15726954 user: js tags: trunk | |
2015-02-18
| ||
22:56 | Add of_getsockname() and make use of it check-in: f18615e057 user: js tags: trunk | |
2015-02-16
| ||
08:39 | Explicitly pass errno to exceptions check-in: 62e2de30b9 user: js tags: trunk | |
Changes
Modified src/OFKernelEventObserver.m from [83e01ba01e] to [e8b15decf5].
︙ | ︙ | |||
45 46 47 48 49 50 51 52 53 54 55 56 57 58 | # import "OFKernelEventObserver_select.h" #endif #import "OFInitializationFailedException.h" #import "OFInvalidArgumentException.h" #import "OFOutOfRangeException.h" #import "socket_helpers.h" enum { QUEUE_ADD = 0, QUEUE_REMOVE = 1, QUEUE_READ = 0, QUEUE_WRITE = 2 | > | 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | # import "OFKernelEventObserver_select.h" #endif #import "OFInitializationFailedException.h" #import "OFInvalidArgumentException.h" #import "OFOutOfRangeException.h" #import "socket.h" #import "socket_helpers.h" enum { QUEUE_ADD = 0, QUEUE_REMOVE = 1, QUEUE_READ = 0, QUEUE_WRITE = 2 |
︙ | ︙ | |||
140 141 142 143 144 145 146 | if (bind(_cancelFD[0], (struct sockaddr*)&_cancelAddr, sizeof(_cancelAddr))) @throw [OFInitializationFailedException exceptionWithClass: [self class]]; # ifndef __wii__ cancelAddrLen = sizeof(_cancelAddr); | | | | 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | if (bind(_cancelFD[0], (struct sockaddr*)&_cancelAddr, sizeof(_cancelAddr))) @throw [OFInitializationFailedException exceptionWithClass: [self class]]; # ifndef __wii__ cancelAddrLen = sizeof(_cancelAddr); if (of_getsockname(_cancelFD[0], (struct sockaddr*)&_cancelAddr, &cancelAddrLen) != 0) @throw [OFInitializationFailedException exceptionWithClass: [self class]]; # endif #endif _maxFD = _cancelFD[0]; _FDToObject = [self allocMemoryWithSize: sizeof(id) |
︙ | ︙ |
Modified src/OFTCPSocket.m from [f120fb3aeb] to [421ec8b16e].
︙ | ︙ | |||
41 42 43 44 45 46 47 | #import "OFInvalidArgumentException.h" #import "OFListenFailedException.h" #import "OFNotConnectedException.h" #import "OFNotImplementedException.h" #import "OFOutOfMemoryException.h" #import "OFSetOptionFailedException.h" | | > | 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #import "OFInvalidArgumentException.h" #import "OFListenFailedException.h" #import "OFNotConnectedException.h" #import "OFNotImplementedException.h" #import "OFOutOfMemoryException.h" #import "OFSetOptionFailedException.h" #import "socket.h" #import "socket_helpers.h" #import "resolver.h" /* References for static linking */ void _references_to_categories_of_OFTCPSocket(void) { _OFTCPSocket_SOCKS5_reference = 1; } |
︙ | ︙ | |||
440 441 442 443 444 445 446 | } if (port > 0) return port; #ifndef __wii__ addrLen = (socklen_t)sizeof(addr.storage); | | > | 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 | } if (port > 0) return port; #ifndef __wii__ addrLen = (socklen_t)sizeof(addr.storage); if (of_getsockname(_socket, (struct sockaddr*)&addr.storage, &addrLen) != 0) { int errNo = of_socket_errno(); close(_socket); _socket = INVALID_SOCKET; @throw [OFBindFailedException exceptionWithHost: host port: port |
︙ | ︙ |
Modified src/OFUDPSocket.m from [3c38516b1b] to [455c967f24].
︙ | ︙ | |||
31 32 33 34 35 36 37 | #import "OFInitializationFailedException.h" #import "OFInvalidArgumentException.h" #import "OFNotConnectedException.h" #import "OFOutOfRangeException.h" #import "OFReadFailedException.h" #import "OFWriteFailedException.h" | | > | 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #import "OFInitializationFailedException.h" #import "OFInvalidArgumentException.h" #import "OFNotConnectedException.h" #import "OFOutOfRangeException.h" #import "OFReadFailedException.h" #import "OFWriteFailedException.h" #import "socket.h" #import "socket_helpers.h" #import "resolver.h" #ifdef __wii__ static uint16_t freePort = 65532; #endif #ifdef OF_HAVE_THREADS @interface OFUDPSocket_ResolveThread: OFThread |
︙ | ︙ | |||
430 431 432 433 434 435 436 | } if (port > 0) return port; #ifndef __wii__ addrLen = (socklen_t)sizeof(addr.storage); | | > | 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 | } if (port > 0) return port; #ifndef __wii__ addrLen = (socklen_t)sizeof(addr.storage); if (of_getsockname(_socket, (struct sockaddr*)&addr.storage, &addrLen) != 0) { int errNo = of_socket_errno(); close(_socket); _socket = INVALID_SOCKET; @throw [OFBindFailedException exceptionWithHost: host port: port |
︙ | ︙ |
Modified src/socket.h from [347ab62b21] to [3d1ffffaa0].
︙ | ︙ | |||
67 68 69 70 71 72 73 74 75 76 | #endif #ifdef __cplusplus extern "C" { #endif extern bool of_socket_init(void); extern int of_socket_errno(void); #ifdef __cplusplus } #endif | > > > > | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #endif #ifdef __cplusplus extern "C" { #endif extern bool of_socket_init(void); extern int of_socket_errno(void); # ifndef __wii__ extern int of_getsockname(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len); # endif #ifdef __cplusplus } #endif |
Modified src/socket.m from [f110c9fc59] to [a024642fe6].
︙ | ︙ | |||
14 15 16 17 18 19 20 | * file. */ #include "config.h" #include <errno.h> | | | > > > > > > > | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | * file. */ #include "config.h" #include <errno.h> #import "OFException.h" /* For some E* -> WSAE* defines */ #import "OFLockFailedException.h" #import "OFUnlockFailedException.h" #import "socket.h" #ifdef OF_HAVE_THREADS # include "threading.h" static of_once_t onceControl = OF_ONCE_INIT; static of_mutex_t mutex; #endif static bool initialized = false; static void init(void) { #if defined(_WIN32) WSADATA wsa; if (WSAStartup(MAKEWORD(2, 0), &wsa)) return; #elif defined(__wii__) if (net_init() < 0) return; #endif #ifdef OF_HAVE_THREADS if (!of_mutex_new(&mutex)) return; #endif initialized = true; } bool of_socket_init() { |
︙ | ︙ | |||
152 153 154 155 156 157 158 | case WSAEWOULDBLOCK: return EWOULDBLOCK; } return 0; #endif } | > > > > > > > > > > > > > > > > > > > > > > > > | 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | case WSAEWOULDBLOCK: return EWOULDBLOCK; } return 0; #endif } #ifndef __wii__ int of_getsockname(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len) { int ret; # ifdef OF_HAVE_THREADS if (!of_mutex_lock(&mutex)) @throw [OFLockFailedException exception]; # endif ret = getsockname(socket, address, address_len); # ifdef OF_HAVE_THREADS if (!of_mutex_unlock(&mutex)) @throw [OFUnlockFailedException exception]; # endif return ret; } #endif |