*/\r
\r
\r
-#ifdef _WIN32\r
-#include <windows.h>\r
-#include <winsock2.h>\r
-#include <ws2tcpip.h>\r
-#else /* !_WIN32 */\r
-#include <sys/ioctl.h>\r
-#include <sys/socket.h>\r
-#include <netinet/in.h>\r
-#include <netinet/tcp.h>\r
-#include <netdb.h>\r
-#endif /* !_WIN32 */\r
-\r
#include "emulator.h"\r
#include "net/slirp.h"\r
#include "qemu_socket.h"\r
#include "nbd.h"\r
#include "tizen/src/debug_ch.h"\r
\r
-//DEFAULT_DEBUG_CHANNEL(qemu);\r
MULTI_DEBUG_CHANNEL(qemu, sdb);\r
\r
extern char tizen_target_path[];\r
extern int tizen_base_port;\r
\r
-/* QSOCKET_CALL is used to deal with the fact that EINTR happens pretty\r
- * easily in QEMU since we use SIGALRM to implement periodic timers\r
- */\r
-\r
-#ifdef _WIN32\r
-# define QSOCKET_CALL(_ret,_cmd) \\r
- do { _ret = (_cmd); } while ( _ret < 0 && WSAGetLastError() == WSAEINTR )\r
-#else\r
-# define QSOCKET_CALL(_ret,_cmd) \\r
- do { \\r
- errno = 0; \\r
- do { _ret = (_cmd); } while ( _ret < 0 && errno == EINTR ); \\r
- } while (0);\r
-#endif\r
-\r
-#ifdef _WIN32\r
-\r
-#include <errno.h>\r
-\r
-static int winsock_error;\r
-\r
-#define WINSOCK_ERRORS_LIST \\r
- EE(WSA_INVALID_HANDLE,EINVAL,"invalid handle") \\r
-EE(WSA_NOT_ENOUGH_MEMORY,ENOMEM,"not enough memory") \\r
-EE(WSA_INVALID_PARAMETER,EINVAL,"invalid parameter") \\r
-EE(WSAEINTR,EINTR,"interrupted function call") \\r
-EE(WSAEALREADY,EALREADY,"operation already in progress") \\r
-EE(WSAEBADF,EBADF,"bad file descriptor") \\r
-EE(WSAEACCES,EACCES,"permission denied") \\r
-EE(WSAEFAULT,EFAULT,"bad address") \\r
-EE(WSAEINVAL,EINVAL,"invalid argument") \\r
-EE(WSAEMFILE,EMFILE,"too many opened files") \\r
-EE(WSAEWOULDBLOCK,EWOULDBLOCK,"resource temporarily unavailable") \\r
-EE(WSAEINPROGRESS,EINPROGRESS,"operation now in progress") \\r
-EE(WSAEALREADY,EAGAIN,"operation already in progress") \\r
-EE(WSAENOTSOCK,EBADF,"socket operation not on socket") \\r
-EE(WSAEDESTADDRREQ,EDESTADDRREQ,"destination address required") \\r
-EE(WSAEMSGSIZE,EMSGSIZE,"message too long") \\r
-EE(WSAEPROTOTYPE,EPROTOTYPE,"wrong protocol type for socket") \\r
-EE(WSAENOPROTOOPT,ENOPROTOOPT,"bad protocol option") \\r
-EE(WSAEADDRINUSE,EADDRINUSE,"address already in use") \\r
-EE(WSAEADDRNOTAVAIL,EADDRNOTAVAIL,"cannot assign requested address") \\r
-EE(WSAENETDOWN,ENETDOWN,"network is down") \\r
-EE(WSAENETUNREACH,ENETUNREACH,"network unreachable") \\r
-EE(WSAENETRESET,ENETRESET,"network dropped connection on reset") \\r
-EE(WSAECONNABORTED,ECONNABORTED,"software caused connection abort") \\r
-EE(WSAECONNRESET,ECONNRESET,"connection reset by peer") \\r
-EE(WSAENOBUFS,ENOBUFS,"no buffer space available") \\r
-EE(WSAEISCONN,EISCONN,"socket is already connected") \\r
-EE(WSAENOTCONN,ENOTCONN,"socket is not connected") \\r
-EE(WSAESHUTDOWN,ESHUTDOWN,"cannot send after socket shutdown") \\r
-EE(WSAETOOMANYREFS,ETOOMANYREFS,"too many references") \\r
-EE(WSAETIMEDOUT,ETIMEDOUT,"connection timed out") \\r
-EE(WSAECONNREFUSED,ECONNREFUSED,"connection refused") \\r
-EE(WSAELOOP,ELOOP,"cannot translate name") \\r
-EE(WSAENAMETOOLONG,ENAMETOOLONG,"name too long") \\r
-EE(WSAEHOSTDOWN,EHOSTDOWN,"host is down") \\r
-EE(WSAEHOSTUNREACH,EHOSTUNREACH,"no route to host") \\r
-\r
-typedef struct {\r
- int winsock;\r
- int unix;\r
- const char* string;\r
-} WinsockError;\r
-\r
-static const WinsockError _winsock_errors[] = {\r
-#define EE(w,u,s) { w, u, s },\r
- WINSOCK_ERRORS_LIST\r
-#undef EE\r
- { -1, -1, NULL }\r
-};\r
-\r
-/* this function reads the latest winsock error code and updates\r
- * errno to a matching value. It also returns the new value of\r
- * errno.\r
- */\r
-static int _fix_errno( void )\r
-{\r
- const WinsockError* werr = _winsock_errors;\r
- int unix = EINVAL; /* generic error code */\r
-\r
- winsock_error = WSAGetLastError();\r
-\r
- for ( ; werr->string != NULL; werr++ ) {\r
- if (werr->winsock == winsock_error) {\r
- unix = werr->unix;\r
- break;\r
- }\r
- }\r
- errno = unix;\r
- return -1;\r
-}\r
-\r
-#else\r
-static int _fix_errno( void )\r
-{\r
- return -1;\r
-}\r
-\r
-#endif\r
-\r
-#define SOCKET_CALL(cmd) \\r
- int ret; \\r
-QSOCKET_CALL(ret, (cmd)); \\r
-if (ret < 0) \\r
-return _fix_errno(); \\r
-return ret; \\r
-\r
-int socket_send(int fd, const void* buf, int buflen)\r
-{\r
- SOCKET_CALL(send(fd, buf, buflen, 0))\r
-}\r
-\r
#ifdef _WIN32\r
\r
- static void\r
-socket_close_handler( void* _fd )\r
+static void socket_close_handler( void* _fd )\r
{\r
int fd = (int)_fd;\r
int ret;\r
closesocket( fd );\r
}\r
\r
- void\r
-socket_close( int fd )\r
+void socket_close( int fd )\r
{\r
int old_errno = errno;\r
\r
\r
#include <unistd.h>\r
\r
- void\r
-socket_close( int fd )\r
+void socket_close( int fd )\r
{\r
int old_errno = errno;\r
\r
}\r
\r
void notify_sdb_daemon_start(void) {\r
- \r
+\r
int s;\r
- /* \r
+ /*\r
* send a simple message to the SDB host server to tell it we just started.\r
* it should be listening on port 26099.\r
*/\r
/* length is hex host:emulator:port: -> 0x13 = 20 */\r
sprintf(tmp, "00%2xhost:emulator:%d:%s", 20 + strlen(targetname), tizen_base_port + 1, targetname);\r
INFO("message to send to SDB server: %s\n", tmp);\r
- if (socket_send(s, tmp, MAXPACKETLEN) < 0) {\r
+ if (send(s, tmp, MAXPACKETLEN,0) < 0) {\r
ERR( "message sending to SDB server error!\n");\r
+ perror("sdb.c: ");\r
}\r
\r
- if (s >= 0)\r
+ if (s >= 0){\r
socket_close(s);\r
- \r
+ }\r
+\r
free(targetname);\r
}\r