@@ -29,28 +29,32 @@ #import "OFBindDDPSocketFailedException.h" @implementation OFDDPSocket @dynamic delegate; -- (OFSocketAddress)bindToPort: (uint8_t)port +- (OFSocketAddress)bindToNetwork: (uint16_t)network + node: (uint8_t)node + port: (uint8_t)port { OFSocketAddress address; #if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC) int flags; #endif if (_socket != OFInvalidSocketHandle) @throw [OFAlreadyConnectedException exceptionWithSocket: self]; - address = OFSocketAddressMakeAppleTalk(0, 0, port); + address = OFSocketAddressMakeAppleTalk(network, node, port); if ((_socket = socket(address.sockaddr.at.sat_family, SOCK_DGRAM | SOCK_CLOEXEC, 0)) == OFInvalidSocketHandle) @throw [OFBindDDPSocketFailedException - exceptionWithPort: port - socket: self - errNo: OFSocketErrNo()]; + exceptionWithNetwork: network + node: node + port: port + 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) @@ -63,13 +67,15 @@ closesocket(_socket); _socket = OFInvalidSocketHandle; @throw [OFBindDDPSocketFailedException - exceptionWithPort: port - socket: self - errNo: errNo]; + exceptionWithNetwork: network + node: node + port: port + socket: self + errNo: errNo]; } memset(&address, 0, sizeof(address)); address.family = OFSocketAddressFamilyAppleTalk; address.length = (socklen_t)sizeof(address.sockaddr); @@ -80,23 +86,27 @@ closesocket(_socket); _socket = OFInvalidSocketHandle; @throw [OFBindDDPSocketFailedException - exceptionWithPort: port - socket: self - errNo: errNo]; + exceptionWithNetwork: network + node: node + port: port + socket: self + errNo: errNo]; } if (address.sockaddr.at.sat_family != AF_APPLETALK) { closesocket(_socket); _socket = OFInvalidSocketHandle; @throw [OFBindDDPSocketFailedException - exceptionWithPort: port - socket: self - errNo: EAFNOSUPPORT]; + exceptionWithNetwork: network + node: node + port: port + socket: self + errNo: EAFNOSUPPORT]; } return address; } @end