c++ - BSD Sockets Invalid Argument at connection -
c++ - BSD Sockets Invalid Argument at connection -
i maintain getting invalid argument error when seek connect client server. couple threads online said can happen when addrlen not right, tried changing literal value after counting length , did not work. tried strlen() no luck. anyways, relevant code -
server -
struct sockaddr name; int main(int agrc, char** argv) { int sock, new_sd, adrlen; //sock socket, new_sd connection socket name.sa_family = af_inet; strcpy(name.sa_data, "127.0.0.1"); adrlen = strlen(name.sa_data) + sizeof(name.sa_family); //make socket sock = socket(af_inet, sock_stream, 0); if (sock < 0) { printf("\nbind error %m", errno); exit(1); } //unlink , bind unlink("127.0.0.1"); if(bind (sock, &name, adrlen) < 0) printf("\nbind error %m", errno); //listen if(listen(sock, 5) < 0) printf("\nlisten error %m", errno); //accept new_sd = accept(sock, &name, (socklen_t*)&adrlen); if( new_sd < 0) { printf("\naccept error %m", errno); exit(1); }
client -
int main(int agrc, char** argv) { int sock, new_sd, adrlen; sock = socket(af_inet, sock_stream, 0); if (sock < 0) { printf("\nserver socket failure %m", errno); exit(1); } //stuff server socket name.sa_family = af_inet; strcpy(name.sa_data, "127.0.0.1"); adrlen = strlen(name.sa_data) + sizeof(name.sa_family); cout<<"\nadrlen: "<<adrlen<<"\n"; if(connect(sock, &name, adrlen) < 0) { printf("\nclient connection failure %m", errno); exit(1); }
i don't see wrong, guess might overlooking or unaware of something. help appreciated.
well big problem misunderstanding sockaddr struct!
firstly utilize sockaddr_in.
you write code more following:
sockaddr_in sai; sai.sin_family = af_inet; sai.sin_port = htons( 12345 ); /// or whatever port wish use. inet_aton("127.0.0.1", &sai.sin_addr.s_addr);
note: htons converts short value host network format. host big or little endian. network big endian.
c++ connection client-server sockets invalid-argument
Comments
Post a Comment