Overview
Comment: | OFUNIXDatagramSocket: Allow binding to nil path |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
36c65b846863546e951116bdc5e16507 |
User & Date: | js on 2023-07-16 17:53:24 |
Other Links: | manifest | tags |
Context
2023-07-17
| ||
19:24 | Fix building for MorphOS check-in: 3f1ba8d396 user: js tags: trunk | |
2023-07-16
| ||
17:53 | OFUNIXDatagramSocket: Allow binding to nil path check-in: 36c65b8468 user: js tags: trunk | |
2023-07-15
| ||
23:44 | Never set mutationsPtr to self check-in: 27d8eb922d user: js tags: trunk | |
Changes
Modified src/OFDatagramSocket.m from [0e772bf0c7] to [e6fec3137b].
︙ | ︙ | |||
194 195 196 197 198 199 200 | @throw [OFReadFailedException exceptionWithObject: self requestedLength: length errNo: OFSocketErrNo()]; #endif if (sender != NULL) { | | > > > | 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | @throw [OFReadFailedException exceptionWithObject: self requestedLength: length errNo: OFSocketErrNo()]; #endif if (sender != NULL) { struct sockaddr *sa = (struct sockaddr *)&sender->sockaddr; if (sender->length >= sizeof(sa->sa_family)) { switch (sa->sa_family) { case AF_INET: sender->family = OFSocketAddressFamilyIPv4; break; #ifdef OF_HAVE_IPV6 case AF_INET6: sender->family = OFSocketAddressFamilyIPv6; break; |
︙ | ︙ | |||
222 223 224 225 226 227 228 229 230 231 232 233 234 235 | sender->family = OFSocketAddressFamilyAppleTalk; break; #endif default: sender->family = OFSocketAddressFamilyUnknown; break; } } return ret; } - (void)asyncReceiveIntoBuffer: (void *)buffer length: (size_t)length { | > > | 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 | sender->family = OFSocketAddressFamilyAppleTalk; break; #endif default: sender->family = OFSocketAddressFamilyUnknown; break; } } else sender->family = OFSocketAddressFamilyUnknown; } return ret; } - (void)asyncReceiveIntoBuffer: (void *)buffer length: (size_t)length { |
︙ | ︙ |
Modified src/OFSocket.h from [413740135d] to [ef7090ccb7].
︙ | ︙ | |||
314 315 316 317 318 319 320 | /** * @brief Gets the UNIX socket path of the specified @ref OFSocketAddress. * * @param address The address on which to get the UNIX socket path * @return The UNIX socket path */ | | | 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 | /** * @brief Gets the UNIX socket path of the specified @ref OFSocketAddress. * * @param address The address on which to get the UNIX socket path * @return The UNIX socket path */ extern OFString *OFSocketAddressUNIXPath( const OFSocketAddress *_Nonnull address); /** * @brief Sets the IPX network of the specified @ref OFSocketAddress. * * @param address The address on which to set the IPX network * @param network The IPX network to set on the address |
︙ | ︙ |
Modified src/OFSocket.m from [f0f36303c9] to [602607c474].
︙ | ︙ | |||
975 976 977 978 979 980 981 982 983 984 985 986 987 988 | OFSocketAddressString(const OFSocketAddress *address) { switch (address->family) { case OFSocketAddressFamilyIPv4: return IPv4String(address); case OFSocketAddressFamilyIPv6: return IPv6String(address); case OFSocketAddressFamilyIPX: return IPXString(address); case OFSocketAddressFamilyAppleTalk: return appleTalkString(address); default: @throw [OFInvalidArgumentException exception]; } | > > | 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 | OFSocketAddressString(const OFSocketAddress *address) { switch (address->family) { case OFSocketAddressFamilyIPv4: return IPv4String(address); case OFSocketAddressFamilyIPv6: return IPv6String(address); case OFSocketAddressFamilyUNIX: return OFSocketAddressUNIXPath(address); case OFSocketAddressFamilyIPX: return IPXString(address); case OFSocketAddressFamilyAppleTalk: return appleTalkString(address); default: @throw [OFInvalidArgumentException exception]; } |
︙ | ︙ | |||
1026 1027 1028 1029 1030 1031 1032 | length = address->length - offsetof(struct sockaddr_un, sun_path); for (socklen_t i = 0; i < length; i++) if (address->sockaddr.un.sun_path[i] == 0) length = i; | < < < | 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 | length = address->length - offsetof(struct sockaddr_un, sun_path); for (socklen_t i = 0; i < length; i++) if (address->sockaddr.un.sun_path[i] == 0) length = i; return [OFString stringWithCString: address->sockaddr.un.sun_path encoding: [OFLocale encoding] length: length]; } void OFSocketAddressSetIPXNetwork(OFSocketAddress *address, uint32_t network) |
︙ | ︙ |
Modified src/OFUNIXDatagramSocket.h from [e48f72b594] to [9e7d13dbcb].
︙ | ︙ | |||
59 60 61 62 63 64 65 | */ @property OF_NULLABLE_PROPERTY (assign, nonatomic) id <OFUNIXDatagramSocketDelegate> delegate; /** * @brief Bind the socket to the specified path. * | | | > | | 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | */ @property OF_NULLABLE_PROPERTY (assign, nonatomic) id <OFUNIXDatagramSocketDelegate> delegate; /** * @brief Bind the socket to the specified path. * * @param path The path to bind to or `nil` for an anonymous socket * @return The address on which this socket can be reached, if a path was * specified * @throw OFBindUNIXSocketFailedException Binding failed * @throw OFAlreadyOpenException The socket is already bound */ - (OFSocketAddress)bindToPath: (nullable OFString *)path; @end OF_ASSUME_NONNULL_END |
Modified src/OFUNIXDatagramSocket.m from [8a5a642655] to [05859378eb].
︙ | ︙ | |||
36 37 38 39 40 41 42 43 | #if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC) int flags; #endif if (_socket != OFInvalidSocketHandle) @throw [OFAlreadyOpenException exceptionWithObject: self]; address = OFSocketAddressMakeUNIX(path); | > > > > | > | | > > | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC) int flags; #endif if (_socket != OFInvalidSocketHandle) @throw [OFAlreadyOpenException exceptionWithObject: self]; if (path != nil) address = OFSocketAddressMakeUNIX(path); else { address.family = OFSocketAddressFamilyUnknown; address.length = 0; } if ((_socket = socket(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, 0)) == OFInvalidSocketHandle) @throw [OFBindUNIXSocketFailedException exceptionWithPath: path socket: self errNo: OFSocketErrNo()]; _canBlock = true; #if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC) if ((flags = fcntl(_socket, F_GETFD, 0)) != -1) fcntl(_socket, F_SETFD, flags | FD_CLOEXEC); #endif if (path != nil) { if (bind(_socket, (struct sockaddr *)&address.sockaddr, address.length) != 0) { int errNo = OFSocketErrNo(); closesocket(_socket); _socket = OFInvalidSocketHandle; @throw [OFBindUNIXSocketFailedException exceptionWithPath: path socket: self errNo: errNo]; } } return address; } @end |
Modified tests/OFUNIXStreamSocketTests.m from [d941ba25ca] to [810201952c].
︙ | ︙ | |||
77 78 79 80 81 82 83 | TEST(@"-[writeBuffer:length:]", R([sockAccepted writeBuffer: "Hello" length: 5])) TEST(@"-[readIntoBuffer:length:]", [sockClient readIntoBuffer: buffer length: 5] == 5 && memcmp(buffer, "Hello", 5) == 0) | | | | 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | TEST(@"-[writeBuffer:length:]", R([sockAccepted writeBuffer: "Hello" length: 5])) TEST(@"-[readIntoBuffer:length:]", [sockClient readIntoBuffer: buffer length: 5] == 5 && memcmp(buffer, "Hello", 5) == 0) TEST(@"-[remoteAddress]", OFSocketAddressUNIXPath( sockAccepted.remoteAddress).length == 0) } @finally { #ifdef OF_HAVE_FILES [[OFFileManager defaultManager] removeItemAtPath: path]; #endif } objc_autoreleasePoolPop(pool); } @end |