c++ - C server socket accepts clients with no request -
c++ - C server socket accepts clients with no request -
i'll maintain simple. code:
#include "stdafx.h" #include <winsock2.h> #include <conio.h> #include <iostream> #include <stdio.h> #include <tchar.h> int _tmain(int argc, _tchar* argv[]) { wsadata wsadata; int error = wsastartup(0x0202, &wsadata); if(error) printf("winsock error!"); socket server; struct sockaddr_in server_addr; server_addr.sin_family = af_inet; server_addr.sin_port = htons(5657); server_addr.sin_addr.s_addr = htonl (inaddr_any); server = socket(af_inet, sock_stream, 0); if (server == invalid_socket) printf("invalid socket!"); error = bind(server, (lpsockaddr)&server_addr, sizeof(server_addr)); if(error) printf("connect error!"); listen(server, somaxconn); printf("server established! listening...\n"); sockaddr_in client_addr; socket client; client = accept(server, (struct sockaddr*)&client_addr, (int *)sizeof(client_addr)); if(client==invalid_socket) printf("invalid socket!\n"); printf("a client!"); closesocket(server); wsacleanup(); getch(); homecoming 0; }
is:
server established! listening... invalid socket! client!
i've done sockets in c# , guess server supposed hear , wait client, , whenever client requests connection, server should take it, server accepts socket without waiting, , accepted socket invalid, too! why happen , how can solve it?
this:
(int *)sizeof(client_addr)
is wrong, you're casting size pointer.
socklen_t client_addr_len = sizeof(client_addr); client = accept(server, (struct sockaddr*)&client_addr, &client_addr_len);
c++ c sockets
Comments
Post a Comment