| 37 | */ |
| 38 | |
| 39 | void duk_trans_socket_init(void) { |
| 40 | struct sockaddr_in addr; |
| 41 | int on; |
| 42 | |
| 43 | server_sock = socket(AF_INET, SOCK_STREAM, 0); |
| 44 | if (server_sock < 0) { |
| 45 | fprintf(stderr, "%s: failed to create server socket: %s\n", |
| 46 | __FILE__, strerror(errno)); |
| 47 | fflush(stderr); |
| 48 | goto fail; |
| 49 | } |
| 50 | |
| 51 | on = 1; |
| 52 | if (setsockopt(server_sock, SOL_SOCKET, SO_REUSEADDR, (const char *) &on, sizeof(on)) < 0) { |
| 53 | fprintf(stderr, "%s: failed to set SO_REUSEADDR for server socket: %s\n", |
| 54 | __FILE__, strerror(errno)); |
| 55 | fflush(stderr); |
| 56 | goto fail; |
| 57 | } |
| 58 | |
| 59 | memset((void *) &addr, 0, sizeof(addr)); |
| 60 | addr.sin_family = AF_INET; |
| 61 | addr.sin_addr.s_addr = INADDR_ANY; |
| 62 | addr.sin_port = htons(DUK_DEBUG_PORT); |
| 63 | |
| 64 | if (bind(server_sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) { |
| 65 | fprintf(stderr, "%s: failed to bind server socket: %s\n", |
| 66 | __FILE__, strerror(errno)); |
| 67 | fflush(stderr); |
| 68 | goto fail; |
| 69 | } |
| 70 | |
| 71 | listen(server_sock, 1 /*backlog*/); |
| 72 | return; |
| 73 | |
| 74 | fail: |
| 75 | if (server_sock >= 0) { |
| 76 | (void) close(server_sock); |
| 77 | server_sock = -1; |
| 78 | } |
| 79 | } |
| 80 | |
| 81 | void duk_trans_socket_finish(void) { |
| 82 | if (client_sock >= 0) { |