X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/c1d3e52e58e86c49f9d04e06ae8e0ece4b98250c..c937f292473ac8c8be2694c7ebf59934d904d751:/Handler.cpp diff --git a/Handler.cpp b/Handler.cpp index 4f11b7b..d048d83 100644 --- a/Handler.cpp +++ b/Handler.cpp @@ -153,7 +153,7 @@ static void *OnClient(void *data) { return NULL; } -extern "C" void CYHandleClient(int socket) { +void CYHandleClient(int socket) { // XXX: this leaks memory... really? CYPool *pool(new CYPool()); CYClient *client(new(*pool) CYClient(socket)); @@ -174,7 +174,7 @@ static void CYHandleSocket(const char *path) { CYHandleClient(socket); } -extern "C" void CYHandleServer(pid_t pid) { try { +_extern void CYHandleServer(pid_t pid) { try { char path[1024]; sprintf(path, "/tmp/.s.cy.%u", pid); CYHandleSocket(path); @@ -183,7 +183,7 @@ extern "C" void CYHandleServer(pid_t pid) { try { fprintf(stderr, "%s\n", error.PoolCString(pool)); } } -extern "C" char *MSmain0(int argc, char *argv[]) { try { +_extern char *MSmain0(int argc, char *argv[]) { try { _assert(argc == 2); CYHandleSocket(argv[1]); @@ -218,6 +218,9 @@ struct CYServer { void Listen() { socket_ = _syscall(::socket(PF_INET, SOCK_STREAM, 0)); try { + int value; + _syscall(::setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &(value = 1), sizeof(value))); + sockaddr_in address; address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; @@ -245,7 +248,7 @@ static void *OnServer(void *data) { return NULL; } -extern "C" void CYListenServer(short port) { +_extern void CYListenServer(short port) { CYInitializeDynamic(); CYServer *server(new CYServer(port));