コード例 #1
0
ファイル: api.c プロジェクト: Cppowboy/mtcp
/*----------------------------------------------------------------------------*/
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;
}
コード例 #2
0
ファイル: PipePoster.cpp プロジェクト: PedroD222/SO_1516si
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;
}
コード例 #3
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);
}
コード例 #4
0
ファイル: PipePoster.cpp プロジェクト: PedroD222/SO_1516si
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;
}
コード例 #5
0
ファイル: PipePoster.cpp プロジェクト: PedroD222/SO_1516si
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;
}