From: munkyu.im Date: Thu, 22 Aug 2013 13:16:16 +0000 (+0900) Subject: sdb: add device_serial_number X-Git-Tag: TizenStudio_2.0_p2.3~678^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4ad17128a6d0e305ff74d368a5ed563b7b29ddc7;p=sdk%2Femulator%2Fqemu.git sdb: add device_serial_number device_serial_number = base_port + 1 Change-Id: I1cccf7f9135da3834dbf0f646f295b8564b97ee1 Signed-off-by: munkyu.im --- diff --git a/tizen/src/emul_state.c b/tizen/src/emul_state.c index b74666e..a3a1121 100644 --- a/tizen/src/emul_state.c +++ b/tizen/src/emul_state.c @@ -42,7 +42,7 @@ MULTI_DEBUG_CHANNEL(qemu, emul_state); -static EmulatorConfigInfo _emul_info; +static EmulatorConfigInfo _emul_info = {0,}; static EmulatorConfigState _emul_state; /* start_skin_client or not ? */ @@ -142,6 +142,7 @@ int get_emul_max_touch_point(void) void set_emul_vm_base_port(int port) { _emul_info.vm_base_port = port; + _emul_info.device_serial_number = port + 1; } int get_emul_vm_base_port(void) @@ -149,6 +150,12 @@ int get_emul_vm_base_port(void) return _emul_info.vm_base_port; } +int get_device_serial_number(void) +{ + return _emul_info.device_serial_number; +} + + /* current emulator condition */ int get_emulator_condition(void) { diff --git a/tizen/src/emul_state.h b/tizen/src/emul_state.h index ab7a566..80be40c 100644 --- a/tizen/src/emul_state.h +++ b/tizen/src/emul_state.h @@ -83,6 +83,7 @@ typedef struct EmulatorConfigInfo { bool input_touch_enable; int max_touch_point; int vm_base_port; + int device_serial_number; /* add here */ } EmulatorConfigInfo; @@ -122,6 +123,7 @@ bool is_emul_input_mouse_enable(void); bool is_emul_input_touch_enable(void); int get_emul_max_touch_point(void); int get_emul_vm_base_port(void); +int get_device_serial_number(void); int get_emulator_condition(void); short get_emul_rotation(void); diff --git a/tizen/src/emulator.c b/tizen/src/emulator.c index 8ed63b5..e93ec86 100644 --- a/tizen/src/emulator.c +++ b/tizen/src/emulator.c @@ -89,7 +89,6 @@ gchar maru_kernel_cmdline[LEN_MARU_KERNEL_CMDLINE]; gchar bin_path[PATH_MAX] = { 0, }; gchar log_path[PATH_MAX] = { 0, }; -int tizen_base_port; char tizen_target_path[PATH_MAX]; char tizen_target_img_path[PATH_MAX]; @@ -114,7 +113,7 @@ void exit_emulator(void) mloop_ev_stop(); shutdown_skin_server(); shutdown_guest_server(); - stop_ecs(); + stop_ecs(); #ifdef CONFIG_LINUX /* clean up the vm lock memory by munkyu */ @@ -322,11 +321,11 @@ static void print_system_info(void) INFO("* Current time : %s\n", timeinfo); #ifdef CONFIG_SDL - /* Gets the version of the dynamically linked SDL library */ - INFO("* Host sdl version : (%d, %d, %d)\n", - SDL_Linked_Version()->major, - SDL_Linked_Version()->minor, - SDL_Linked_Version()->patch); + /* Gets the version of the dynamically linked SDL library */ + INFO("* Host sdl version : (%d, %d, %d)\n", + SDL_Linked_Version()->major, + SDL_Linked_Version()->minor, + SDL_Linked_Version()->patch); #endif print_system_info_os(); @@ -358,21 +357,20 @@ static void prepare_basic_features(void) ftp_proxy[MIDBUF] = {0,}, socks_proxy[MIDBUF] = {0,}, dns[MIDBUF] = {0}; - tizen_base_port = get_sdb_base_port(); - qemu_add_opts(&qemu_ecs_opts); - start_ecs(); + start_ecs(); get_host_proxy(http_proxy, https_proxy, ftp_proxy, socks_proxy); /* using "DNS" provided by default QEMU */ g_strlcpy(dns, DEFAULT_QEMU_DNS_IP, strlen(DEFAULT_QEMU_DNS_IP) + 1); + set_sdb_base_port(); + check_vm_lock(); make_vm_lock(); sdb_setup(); /* determine the base port for emulator */ - set_emul_vm_base_port(tizen_base_port); gchar * const tmp_str = g_strdup_printf(" sdb_port=%d," " http_proxy=%s https_proxy=%s ftp_proxy=%s socks_proxy=%s" @@ -504,7 +502,7 @@ void prepare_maru(void) construct_main_window(_skin_argc, _skin_argv, _qemu_argc, _qemu_argv); - int guest_server_port = tizen_base_port + SDB_UDP_SENSOR_INDEX; + int guest_server_port = get_device_serial_number() + SDB_UDP_SENSOR_INDEX; start_guest_server(guest_server_port); mloop_ev_init(); diff --git a/tizen/src/osutil-darwin.c b/tizen/src/osutil-darwin.c index 88e56ba..c47ee89 100644 --- a/tizen/src/osutil-darwin.c +++ b/tizen/src/osutil-darwin.c @@ -53,7 +53,6 @@ MULTI_DEBUG_CHANNEL(qemu, osutil); extern char tizen_target_img_path[]; -extern int tizen_base_port; CFDictionaryRef proxySettings; static char *cfstring_to_cstring(CFStringRef str) { @@ -87,8 +86,9 @@ void make_vm_lock_os(void) { int shmid; char *shared_memory; - - shmid = shmget((key_t)tizen_base_port, MAXLEN, 0666|IPC_CREAT); + int base_port; + base_port = get_emul_vm_base_port(); + shmid = shmget((key_t)base_port, MAXLEN, 0666|IPC_CREAT); if (shmid == -1) { ERR("shmget failed\n"); perror("osutil-darwin: "); @@ -102,7 +102,7 @@ void make_vm_lock_os(void) return; } sprintf(shared_memory, "%s", tizen_target_img_path); - INFO("shared memory key: %d, value: %s\n", tizen_base_port, (char *)shared_memory); + INFO("shared memory key: %d, value: %s\n", base_port, (char *)shared_memory); if (shmdt(shared_memory) == -1) { ERR("shmdt failed\n"); @@ -210,12 +210,12 @@ static int get_auto_proxy(char *http_proxy, char *https_proxy, char *ftp_proxy, char *p = NULL; CFStringRef pacURL = (CFStringRef)CFDictionaryGetValue(proxySettings, - kSCPropNetProxiesProxyAutoConfigURLString); - if (pacURL) { - char url[MAXLEN] = {}; - CFStringGetCString(pacURL, url, sizeof url, kCFStringEncodingASCII); + kSCPropNetProxiesProxyAutoConfigURLString); + if (pacURL) { + char url[MAXLEN] = {}; + CFStringGetCString(pacURL, url, sizeof url, kCFStringEncodingASCII); INFO("pac address: %s\n", (char*)url); - download_url(url); + download_url(url); } fp_pacfile = fopen(pac_tempfile, "r"); @@ -252,7 +252,7 @@ static int get_auto_proxy(char *http_proxy, char *https_proxy, char *ftp_proxy, } else { ERR("fail to get pacfile fp\n"); - return -1; + return -1; } remove(pac_tempfile); @@ -344,7 +344,7 @@ void get_host_proxy_os(char *http_proxy, char *https_proxy, char *ftp_proxy, cha ret = get_auto_proxy(http_proxy, https_proxy, ftp_proxy, socks_proxy); if(strlen(http_proxy) == 0 && ret < 0) { INFO("MANUAL PROXY MODE\n"); - get_proxy(http_proxy, https_proxy, ftp_proxy, socks_proxy); - } + get_proxy(http_proxy, https_proxy, ftp_proxy, socks_proxy); + } } } diff --git a/tizen/src/osutil-linux.c b/tizen/src/osutil-linux.c index 855ff01..f7fd45d 100644 --- a/tizen/src/osutil-linux.c +++ b/tizen/src/osutil-linux.c @@ -57,23 +57,22 @@ MULTI_DEBUG_CHANNEL(emulator, osutil); extern char tizen_target_img_path[]; -extern int tizen_base_port; int g_shmid; char *g_shared_memory; int gproxytool = GCONFTOOL; /* Getting proxy commands */ static const char* gproxycmds[][2] = { - { "gconftool-2 -g /system/proxy/mode" , "gsettings get org.gnome.system.proxy mode" }, - { "gconftool-2 -g /system/proxy/autoconfig_url", "gsettings get org.gnome.system.proxy autoconfig-url" }, - { "gconftool-2 -g /system/http_proxy/host", "gsettings get org.gnome.system.proxy.http host" }, - { "gconftool-2 -g /system/http_proxy/port", "gsettings get org.gnome.system.proxy.http port"}, - { "gconftool-2 -g /system/proxy/secure_host", "gsettings get org.gnome.system.proxy.https host" }, - { "gconftool-2 -g /system/proxy/secure_port", "gsettings get org.gnome.system.proxy.https port" }, - { "gconftool-2 -g /system/proxy/ftp_host", "gsettings get org.gnome.system.proxy.ftp host" }, - { "gconftool-2 -g /system/proxy/ftp_port", "gsettings get org.gnome.system.proxy.ftp port" }, - { "gconftool-2 -g /system/proxy/socks_host", "gsettings get org.gnome.system.proxy.socks host" }, - { "gconftool-2 -g /system/proxy/socks_port", "gsettings get org.gnome.system.proxy.socks port" }, + { "gconftool-2 -g /system/proxy/mode" , "gsettings get org.gnome.system.proxy mode" }, + { "gconftool-2 -g /system/proxy/autoconfig_url", "gsettings get org.gnome.system.proxy autoconfig-url" }, + { "gconftool-2 -g /system/http_proxy/host", "gsettings get org.gnome.system.proxy.http host" }, + { "gconftool-2 -g /system/http_proxy/port", "gsettings get org.gnome.system.proxy.http port"}, + { "gconftool-2 -g /system/proxy/secure_host", "gsettings get org.gnome.system.proxy.https host" }, + { "gconftool-2 -g /system/proxy/secure_port", "gsettings get org.gnome.system.proxy.https port" }, + { "gconftool-2 -g /system/proxy/ftp_host", "gsettings get org.gnome.system.proxy.ftp host" }, + { "gconftool-2 -g /system/proxy/ftp_port", "gsettings get org.gnome.system.proxy.ftp port" }, + { "gconftool-2 -g /system/proxy/socks_host", "gsettings get org.gnome.system.proxy.socks host" }, + { "gconftool-2 -g /system/proxy/socks_port", "gsettings get org.gnome.system.proxy.socks port" }, }; void check_vm_lock_os(void) @@ -118,7 +117,11 @@ void check_vm_lock_os(void) void make_vm_lock_os(void) { - g_shmid = shmget((key_t)tizen_base_port, MAXLEN, 0666|IPC_CREAT); + int base_port; + + base_port = get_emul_vm_base_port(); + + g_shmid = shmget((key_t)base_port, MAXLEN, 0666|IPC_CREAT); if (g_shmid == -1) { ERR("shmget failed\n"); perror("osutil-linux: "); @@ -134,7 +137,7 @@ void make_vm_lock_os(void) g_sprintf(g_shared_memory, "%s", tizen_target_img_path); INFO("shared memory key: %d value: %s\n", - tizen_base_port, (char *)g_shared_memory); + base_port, (char *)g_shared_memory); if (shmdt(g_shared_memory) == -1) { ERR("shmdt failed\n"); @@ -274,7 +277,7 @@ static int get_auto_proxy(char *http_proxy, char *https_proxy, char *ftp_proxy, } else { ERR("fail to get pacfile fp\n"); - return -1; + return -1; } remove(pac_tempfile); diff --git a/tizen/src/osutil-win32.c b/tizen/src/osutil-win32.c index a2117b3..35e40be 100644 --- a/tizen/src/osutil-win32.c +++ b/tizen/src/osutil-win32.c @@ -51,7 +51,6 @@ MULTI_DEBUG_CHANNEL (emulator, osutil); extern char tizen_target_img_path[]; -extern int tizen_base_port; static const char *pactempfile = ".autoproxy"; @@ -99,9 +98,11 @@ void make_vm_lock_os(void) char *pBuf; char *port_in_use; char *shared_memory; + int base_port; + base_port = get_emul_vm_base_port(); shared_memory = g_strdup_printf("%s", tizen_target_img_path); - port_in_use = g_strdup_printf("%d", tizen_base_port); + port_in_use = g_strdup_printf("%d", base_port); hMapFile = CreateFileMapping( INVALID_HANDLE_VALUE, /* use paging file */ NULL, /* default security */ diff --git a/tizen/src/osutil.h b/tizen/src/osutil.h index b421478..f90527a 100644 --- a/tizen/src/osutil.h +++ b/tizen/src/osutil.h @@ -33,6 +33,7 @@ #define __OSUTIL_H__ #include "maru_common.h" +#include "emul_state.h" #define HTTP_PROTOCOL "http=" #define HTTP_PREFIX "http://" diff --git a/tizen/src/sdb.c b/tizen/src/sdb.c index c13340c..f82e33d 100644 --- a/tizen/src/sdb.c +++ b/tizen/src/sdb.c @@ -17,41 +17,41 @@ #include "sdb.h" #include "include/block/nbd.h" #include "tizen/src/debug_ch.h" +#include "emul_state.h" MULTI_DEBUG_CHANNEL(qemu, sdb); extern char tizen_target_path[]; -extern int tizen_base_port; #ifdef _WIN32 static void socket_close_handler( void* _fd ) { - int fd = (int)_fd; - int ret; - char buff[64]; + int fd = (int)_fd; + int ret; + char buff[64]; - /* we want to drain the read side of the socket before closing it */ - do { - ret = recv( fd, buff, sizeof(buff), 0 ); - } while (ret < 0 && WSAGetLastError() == WSAEINTR); + /* we want to drain the read side of the socket before closing it */ + do { + ret = recv( fd, buff, sizeof(buff), 0 ); + } while (ret < 0 && WSAGetLastError() == WSAEINTR); - if (ret < 0 && WSAGetLastError() == EWOULDBLOCK) - return; + if (ret < 0 && WSAGetLastError() == EWOULDBLOCK) + return; - qemu_set_fd_handler( fd, NULL, NULL, NULL ); - closesocket( fd ); + qemu_set_fd_handler( fd, NULL, NULL, NULL ); + closesocket( fd ); } void socket_close( int fd ) { - int old_errno = errno; + int old_errno = errno; - shutdown( fd, SD_BOTH ); - /* we want to drain the socket before closing it */ - qemu_set_fd_handler( fd, socket_close_handler, NULL, (void*)fd ); + shutdown( fd, SD_BOTH ); + /* we want to drain the socket before closing it */ + qemu_set_fd_handler( fd, socket_close_handler, NULL, (void*)fd ); - errno = old_errno; + errno = old_errno; } #else /* !_WIN32 */ @@ -60,134 +60,140 @@ void socket_close( int fd ) void socket_close( int fd ) { - int old_errno = errno; + int old_errno = errno; - shutdown( fd, SHUT_RDWR ); - close( fd ); + shutdown( fd, SHUT_RDWR ); + close( fd ); - errno = old_errno; + errno = old_errno; } #endif /* !_WIN32 */ int inet_strtoip(const char* str, uint32_t *ip) { - int comp[4]; + int comp[4]; - if (sscanf(str, "%d.%d.%d.%d", &comp[0], &comp[1], &comp[2], &comp[3]) != 4) - return -1; + if (sscanf(str, "%d.%d.%d.%d", &comp[0], &comp[1], &comp[2], &comp[3]) != 4) + return -1; - if ((unsigned)comp[0] >= 256 || - (unsigned)comp[1] >= 256 || - (unsigned)comp[2] >= 256 || - (unsigned)comp[3] >= 256) - return -1; + if ((unsigned)comp[0] >= 256 || + (unsigned)comp[1] >= 256 || + (unsigned)comp[2] >= 256 || + (unsigned)comp[3] >= 256) + return -1; - *ip = (uint32_t)((comp[0] << 24) | (comp[1] << 16) | - (comp[2] << 8) | comp[3]); - return 0; + *ip = (uint32_t)((comp[0] << 24) | (comp[1] << 16) | + (comp[2] << 8) | comp[3]); + return 0; } int check_port_bind_listen(uint32_t port) { - struct sockaddr_in addr; - int s, opt = 1; - int ret = -1; - socklen_t addrlen = sizeof(addr); - memset(&addr, 0, addrlen); + struct sockaddr_in addr; + int s, opt = 1; + int ret = -1; + socklen_t addrlen = sizeof(addr); + memset(&addr, 0, addrlen); - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = INADDR_ANY; - addr.sin_port = htons(port); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = INADDR_ANY; + addr.sin_port = htons(port); - if (((s = qemu_socket(AF_INET, SOCK_STREAM, 0)) < 0) || + if (((s = qemu_socket(AF_INET, SOCK_STREAM, 0)) < 0) || #ifndef _WIN32 - (setsockopt(s, SOL_SOCKET,SO_REUSEADDR, (char *)&opt, sizeof(int)) < 0) || + (setsockopt(s, SOL_SOCKET,SO_REUSEADDR, (char *)&opt, sizeof(int)) < 0) || #endif - (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) || - (listen(s, 1) < 0)) { - - /* fail */ - ret = -1; - ERR( "port(%d) listen fail \n", port); - }else{ - /*fsucess*/ - ret = 1; - INFO( "port(%d) listen ok \n", port); - } + (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) || + (listen(s, 1) < 0)) { + + /* fail */ + ret = -1; + ERR( "port(%d) listen fail \n", port); + }else{ + /*fsucess*/ + ret = 1; + INFO( "port(%d) listen ok \n", port); + } #ifdef _WIN32 - closesocket(s); + closesocket(s); #else - close(s); + close(s); #endif - return ret; + return ret; } -int get_sdb_base_port(void) +void set_sdb_base_port(void) { - int tries = 10; - int success = 0; - uint32_t port = 26100; + int tries = 10; + int success = 0; + uint32_t port = 26100; + int base_port; + + base_port = get_emul_vm_base_port(); - if(tizen_base_port == 0){ + if(base_port == 0){ - for ( ; tries > 0; tries--, port += 10 ) { - if(check_port_bind_listen(port + 1) < 0 ) - continue; + for ( ; tries > 0; tries--, port += 10 ) { + if(check_port_bind_listen(port + 1) < 0 ) + continue; - success = 1; - break; - } + success = 1; + break; + } - if (!success) { - ERR( "it seems too many emulator instances are running on this machine. Aborting\n" ); - exit(1); - } + if (!success) { + ERR( "it seems too many emulator instances are running on this machine. Aborting\n" ); + exit(1); + } - tizen_base_port = port; - INFO( "sdb port is %d \n", tizen_base_port); - } + base_port = port; + INFO( "sdb port is %d \n", base_port); + } - return tizen_base_port; + set_emul_vm_base_port(base_port); } void sdb_setup(void) { - int tries = 10; - int success = 0; - uint32_t guest_ip; - char buf[64] = {0,}; - - inet_strtoip("10.0.2.16", &guest_ip); - - for ( ; tries > 0; tries--, tizen_base_port += 10 ) { - // redir form [tcp:26101:10.0.2.16:26101] - sprintf(buf, "tcp:%d:10.0.2.16:26101", tizen_base_port + 1); - if(net_slirp_redir((char*)buf) < 0) - continue; - - INFO( "SDBD established on port %d\n", tizen_base_port + 1); - success = 1; - break; - } - - INFO("redirect [%s] success\n", buf); - if (!success) { - ERR( "it seems too many emulator instances are running on this machine. Aborting\n" ); - exit(1); - } - - INFO( "Port(%d/tcp) listen for SDB \n", tizen_base_port + 1); - - /* for sensort */ - sprintf(buf, "tcp:%d:10.0.2.16:3577", tizen_base_port + SDB_TCP_EMULD_INDEX ); - if(net_slirp_redir((char*)buf) < 0){ - ERR( "redirect [%s] fail \n", buf); - }else{ - INFO("redirect [%s] success\n", buf); - } + int tries = 10; + int success = 0; + uint32_t guest_ip; + char buf[64] = {0,}; + int number; + + number = get_device_serial_number(); + + inet_strtoip("10.0.2.16", &guest_ip); + + for ( ; tries > 0; tries--, number += 10 ) { + // redir form [tcp:26101:10.0.2.16:26101] + sprintf(buf, "tcp:%d:10.0.2.16:26101", number); + if(net_slirp_redir((char*)buf) < 0) + continue; + + INFO( "SDBD established on port %d\n", number); + success = 1; + break; + } + + INFO("redirect [%s] success\n", buf); + if (!success) { + ERR( "it seems too many emulator instances are running on this machine. Aborting\n" ); + exit(1); + } + + INFO( "Port(%d/tcp) listen for SDB \n", number); + + /* for sensort */ + sprintf(buf, "tcp:%d:10.0.2.16:3577", number + SDB_TCP_EMULD_INDEX ); + if(net_slirp_redir((char*)buf) < 0){ + ERR( "redirect [%s] fail \n", buf); + }else{ + INFO("redirect [%s] success\n", buf); + } } int sdb_loopback_client(int port, int type) diff --git a/tizen/src/sdb.h b/tizen/src/sdb.h index 3737cff..66a01ca 100644 --- a/tizen/src/sdb.h +++ b/tizen/src/sdb.h @@ -29,12 +29,12 @@ #define SDB_HOST_PORT 26099 -#define SDB_TCP_EMULD_INDEX 3 /* emulator daemon port */ -#define SDB_TCP_OPENGL_INDEX 4 /* opengl server port */ -#define SDB_UDP_SENSOR_INDEX 3 /* sensor server port */ +#define SDB_TCP_EMULD_INDEX 2 /* emulator daemon port */ +#define SDB_TCP_OPENGL_INDEX 3 /* opengl server port */ +#define SDB_UDP_SENSOR_INDEX 2 /* sensor server port */ void sdb_setup(void); -int get_sdb_base_port(void); +void set_sdb_base_port(void); int inet_strtoip(const char* str, uint32_t *ip); int socket_send(int fd, const void* buf, int buflen); void socket_close(int fd); diff --git a/tizen/src/skin/maruskin_operation.c b/tizen/src/skin/maruskin_operation.c index fc00f8e..21081b9 100644 --- a/tizen/src/skin/maruskin_operation.c +++ b/tizen/src/skin/maruskin_operation.c @@ -49,6 +49,7 @@ #include "maruskin_server.h" #include "emul_state.h" #include "hw/maru_pm.h" +#include "emul_state.h" #ifdef CONFIG_HAX #include "guest_debug.h" @@ -74,8 +75,6 @@ static int pressing_origin_x = -1, pressing_origin_y = -1; extern pthread_mutex_t mutex_screenshot; extern pthread_cond_t cond_screenshot; -extern int tizen_base_port; - static void* run_timed_shutdown_thread(void* args); static void send_to_emuld(const char* request_type, int request_size, const char* send_buf, int buf_size); @@ -611,14 +610,15 @@ static void send_to_emuld(const char* request_type, { char addr[128]; int s = 0; + int device_serial_number = get_device_serial_number(); + snprintf(addr, 128, ":%u", (uint16_t) ( device_serial_number + SDB_TCP_EMULD_INDEX)); - snprintf(addr, 128, ":%u", (uint16_t) (tizen_base_port + SDB_TCP_EMULD_INDEX)); //TODO: Error handling s = inet_connect(addr, NULL); if ( s < 0 ) { ERR( "can't create socket to emulator daemon in guest\n" ); - ERR( "[127.0.0.1:%d/tcp] connect fail (%d:%s)\n" , tizen_base_port + SDB_TCP_EMULD_INDEX , errno, strerror(errno) ); + ERR( "[127.0.0.1:%d/tcp] connect fail (%d:%s)\n" , device_serial_number + SDB_TCP_EMULD_INDEX , errno, strerror(errno) ); return; } @@ -633,7 +633,7 @@ static void send_to_emuld(const char* request_type, } INFO( "send to emuld [req_type:%s, send_data:%s, send_size:%d] 127.0.0.1:%d/tcp \n", - request_type, send_buf, buf_size, tizen_base_port + SDB_TCP_EMULD_INDEX ); + request_type, send_buf, buf_size, device_serial_number + SDB_TCP_EMULD_INDEX ); #ifdef CONFIG_WIN32 closesocket( s );