本文整理汇总了C++中closesocket函数的典型用法代码示例。如果您正苦于以下问题:C++ closesocket函数的具体用法?C++ closesocket怎么用?C++ closesocket使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了closesocket函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: closesocket
void Network::close_socket(SOCKET socket) {
closesocket(socket);
}
示例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();
}
示例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;
}
示例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;
}
示例5: closesocket
void TApplicationServer::nativeClose(int socket)
{
if (socket != (int)INVALID_SOCKET)
closesocket(socket);
}
示例6: win_close_socket
file_error win_close_socket(osd_file *file)
{
closesocket(file->socket);
free(file);
return FILERR_NONE;
}
示例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;
}
示例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);
//.........这里部分代码省略.........
示例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:
//.........这里部分代码省略.........
示例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;
}
示例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);
//.........这里部分代码省略.........
示例12: closesocket
void SocketX::Close()
{
closesocket(socket_);
}
示例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;
}
示例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");
}
示例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
}