/*----------------------------------------------------------------------------*/ int mtcp_close(mctx_t mctx, int sockid) { mtcp_manager_t mtcp; int ret; mtcp = GetMTCPManager(mctx); if (!mtcp) { return -1; } if (sockid < 0 || sockid >= CONFIG.max_concurrency) { TRACE_API("Socket id %d out of range.\n", sockid); errno = EBADF; return -1; } if (mtcp->smap[sockid].socktype == MTCP_SOCK_UNUSED) { TRACE_API("Invalid socket id: %d\n", sockid); errno = EBADF; return -1; } TRACE_API("Socket %d: mtcp_close called.\n", sockid); switch (mtcp->smap[sockid].socktype) { case MTCP_SOCK_STREAM: ret = CloseStreamSocket(mctx, sockid); break; case MTCP_SOCK_LISTENER: ret = CloseListeningSocket(mctx, sockid); break; case MTCP_SOCK_EPOLL: ret = CloseEpollSocket(mctx, sockid); break; case MTCP_SOCK_PIPE: ret = PipeClose(mctx, sockid); break; default: errno = EINVAL; ret = -1; break; } FreeSocket(mctx, sockid, FALSE); return ret; }
UINT WINAPI Sender(LPVOID arg) { PPIPE ppipe = (PPIPE)arg; HANDLE p = PipeOpenWrite(NAMEPIPE); INT i = 0; while (i < STREAM_SIZE) { PipeWrite(p, input + i++, 1); } // close pipe access via "p" handle PipeClose(p); return 0; }
void ExLocalDestroy(void *ctx) { Exchanger *ex = (Exchanger *)ctx; for (int i = 0; i < NUM_CHANNELS; ++i) { // printf("Closing pipe = %d\n", i); PipeClose(&ex->channels[i]); } if (ex->is_server) { ex->done = TRUE; // Do we need to wait all the threads to terminate? pthread_join(ex->ctrl, NULL); } free(ex); }
UINT WINAPI ClientTest2(LPVOID arg) { //HANDLE p = PipeOpenWrite(NAMEPIPE); HANDLE p = PipeOpenWrite(NAMEPIPE); MESSAGE m; char currchar = 'A'; // send NTRIES_TEST2 messages for (int n = 0; n < NTRIES_TEST2; ++n) { FillMessage(m, currchar); if (currchar == 'Z') currchar = 'A'; else currchar++; PipeWrite(p, m, MSG_SIZE); } PipeClose(p); return 0; }
UINT WINAPI ClientTest3(LPVOID arg) { HANDLE p = PipeOpenWrite(NAMEPIPE); MESSAGE m; // send NTRIES messages for (int n = 0; n < NTRIES_TEST3; ++n) { EnterCriticalSection(&clientMutex); FillMessage(m, currchar); if (currchar == 'Z') currchar = 'A'; else currchar++; LeaveCriticalSection(&clientMutex); PipeWrite(p, m, MSG_SIZE); } PipeClose(p); return 0; }