| 38 | | const char *address = luaL_checkstring(L, 3); |
| 39 | | struct sockaddr_storage addrstor; |
| 40 | | addr = (struct sockaddr*)&addrstor; |
| 41 | | |
| 42 | | nixio_addr naddr; |
| 43 | | memset(&naddr, 0, sizeof(naddr)); |
| 44 | | strncpy(naddr.host, address, sizeof(naddr.host) - 1); |
| 45 | | naddr.port = (uint16_t)luaL_checkinteger(L, 4); |
| 46 | | naddr.family = sock->domain; |
| 47 | | |
| 48 | | if (nixio__addr_write(&naddr, addr)) { |
| 49 | | return nixio__perror_s(L); |
| 50 | | } |
| | 42 | if (sock->domain == AF_INET || sock->domain == AF_INET6) { |
| | 43 | const char *address = luaL_checkstring(L, 3); |
| | 44 | addr = (struct sockaddr*)&addr_in; |
| | 45 | alen = sizeof(addr_in); |
| | 46 | |
| | 47 | nixio_addr naddr; |
| | 48 | memset(&naddr, 0, sizeof(naddr)); |
| | 49 | strncpy(naddr.host, address, sizeof(naddr.host) - 1); |
| | 50 | naddr.port = (uint16_t)luaL_checkinteger(L, 4); |
| | 51 | naddr.family = sock->domain; |
| | 52 | |
| | 53 | if (nixio__addr_write(&naddr, addr)) { |
| | 54 | return nixio__perror_s(L); |
| | 55 | } |
| | 56 | } |
| | 57 | |
| | 58 | #ifndef __WINNT__ |
| | 59 | else if (sock->domain == AF_UNIX) { |
| | 60 | size_t pathlen; |
| | 61 | const char *path = luaL_checklstring(L, 3, &pathlen); |
| | 62 | |
| | 63 | addr_un.sun_family = AF_UNIX; |
| | 64 | luaL_argcheck(L, pathlen < sizeof(addr_un.sun_path), 3, "out of range"); |
| | 65 | strncpy(addr_un.sun_path, path, sizeof(addr_un.sun_path)); |
| | 66 | |
| | 67 | addr = (struct sockaddr*)&addr_un; |
| | 68 | alen = sizeof(addr_un); |
| | 69 | } |
| | 70 | #endif |
| 110 | | if (from && sock->domain != AF_INET && sock->domain != AF_INET6) { |
| 111 | | return luaL_argerror(L, 1, "supported families: inet, inet6"); |
| 112 | | } |
| 113 | | |
| 114 | | struct sockaddr *addr = (from) ? (struct sockaddr*)&addrobj : NULL; |
| 115 | | socklen_t alen = (from) ? sizeof(addrobj) : 0; |
| | 135 | if (sock->domain == AF_INET || sock->domain == AF_INET6) { |
| | 136 | addr = (from) ? (struct sockaddr*)&addr_in : NULL; |
| | 137 | alen = (from) ? sizeof(addr_in) : 0; |
| | 138 | } |
| | 139 | #ifndef __WINNT__ |
| | 140 | else if (sock->domain == AF_UNIX) { |
| | 141 | addr = (from) ? (struct sockaddr*)&addr_un : NULL; |
| | 142 | alen = (from) ? sizeof(addr_un) : 0; |
| | 143 | } |
| | 144 | #endif |