diff options
| author | David M. Syzdek <david@syzdek.net> | 2022-01-21 23:15:16 -0900 |
|---|---|---|
| committer | David M. Syzdek <david@syzdek.net> | 2022-01-21 23:15:16 -0900 |
| commit | 919d83cd51fe4328a012a4326cc48f3098099535 (patch) | |
| tree | 07cd913ad30e40b01d29d4fa08f19ca2ba18a49a /examples | |
| parent | 5b5916b62176be35c08be74962635b2abc8f5dd3 (diff) | |
| download | tinyrad-919d83cd51fe4328a012a4326cc48f3098099535.tar.gz tinyrad-919d83cd51fe4328a012a4326cc48f3098099535.tar.bz2 tinyrad-919d83cd51fe4328a012a4326cc48f3098099535.tar.xz tinyrad-919d83cd51fe4328a012a4326cc48f3098099535.zip | |
examples: replacing ss_len
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/socket-example.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/examples/socket-example.c b/examples/socket-example.c index b278c07..547df45 100644 --- a/examples/socket-example.c +++ b/examples/socket-example.c | |||
| @@ -108,7 +108,7 @@ static int should_exit = 0; | |||
| 108 | 108 | ||
| 109 | int main( int argc, char * argv[] ); | 109 | int main( int argc, char * argv[] ); |
| 110 | 110 | ||
| 111 | int my_client( int s, unsigned opts, struct sockaddr_storage * sap ); | 111 | int my_client( int s, unsigned opts, struct sockaddr_storage * sap, socklen_t sa_len ); |
| 112 | void my_connlog( unsigned opts, const struct sockaddr_storage * sa, const char * fmt, ...); | 112 | void my_connlog( unsigned opts, const struct sockaddr_storage * sa, const char * fmt, ...); |
| 113 | int my_error( const char * fmt, ...); | 113 | int my_error( const char * fmt, ...); |
| 114 | char * my_ntop(const struct sockaddr_storage * sa, char * buff, size_t len); | 114 | char * my_ntop(const struct sockaddr_storage * sa, char * buff, size_t len); |
| @@ -143,6 +143,8 @@ int main(int argc, char * argv[]) | |||
| 143 | struct addrinfo * res; | 143 | struct addrinfo * res; |
| 144 | struct sockaddr_storage lsa; | 144 | struct sockaddr_storage lsa; |
| 145 | struct sockaddr_storage sa; | 145 | struct sockaddr_storage sa; |
| 146 | socklen_t lsa_len; | ||
| 147 | socklen_t sa_len; | ||
| 146 | char host[INET6_ADDRSTRLEN+INET_ADDRSTRLEN]; | 148 | char host[INET6_ADDRSTRLEN+INET_ADDRSTRLEN]; |
| 147 | 149 | ||
| 148 | // getopt options | 150 | // getopt options |
| @@ -249,6 +251,8 @@ int main(int argc, char * argv[]) | |||
| 249 | signal(SIGUSR2, SIG_IGN); | 251 | signal(SIGUSR2, SIG_IGN); |
| 250 | 252 | ||
| 251 | // resolve remote host | 253 | // resolve remote host |
| 254 | bzero(&sa, sizeof(sa)); | ||
| 255 | sa_len = 0; | ||
| 252 | if ((optind + 1) == argc) | 256 | if ((optind + 1) == argc) |
| 253 | { | 257 | { |
| 254 | my_verbose(opts, "resolving remote host \"%s\" port \"%s\" ...", argv[optind], port); | 258 | my_verbose(opts, "resolving remote host \"%s\" port \"%s\" ...", argv[optind], port); |
| @@ -263,6 +267,7 @@ int main(int argc, char * argv[]) | |||
| 263 | rinfo.ai_family = res->ai_family; | 267 | rinfo.ai_family = res->ai_family; |
| 264 | bzero(&sa, sizeof(sa)); | 268 | bzero(&sa, sizeof(sa)); |
| 265 | memcpy(&sa, res->ai_addr, res->ai_addrlen); | 269 | memcpy(&sa, res->ai_addr, res->ai_addrlen); |
| 270 | sa_len = res->ai_addrlen; | ||
| 266 | freeaddrinfo(res); | 271 | freeaddrinfo(res); |
| 267 | if (!(laddr)) | 272 | if (!(laddr)) |
| 268 | laddr = (sa.ss_family == AF_INET) ? "0.0.0.0" : "::"; | 273 | laddr = (sa.ss_family == AF_INET) ? "0.0.0.0" : "::"; |
| @@ -280,6 +285,7 @@ int main(int argc, char * argv[]) | |||
| 280 | }; | 285 | }; |
| 281 | bzero(&lsa, sizeof(lsa)); | 286 | bzero(&lsa, sizeof(lsa)); |
| 282 | memcpy(&lsa, res->ai_addr, res->ai_addrlen); | 287 | memcpy(&lsa, res->ai_addr, res->ai_addrlen); |
| 288 | lsa_len = res->ai_addrlen; | ||
| 283 | freeaddrinfo(res); | 289 | freeaddrinfo(res); |
| 284 | 290 | ||
| 285 | // create socket | 291 | // create socket |
| @@ -303,22 +309,21 @@ int main(int argc, char * argv[]) | |||
| 303 | 309 | ||
| 304 | // bind to local address | 310 | // bind to local address |
| 305 | my_verbose(opts, "binding to \"%s\" ...", my_ntop(&lsa, host, sizeof(host))); | 311 | my_verbose(opts, "binding to \"%s\" ...", my_ntop(&lsa, host, sizeof(host))); |
| 306 | if (bind(s, (struct sockaddr *)&lsa, lsa.ss_len) == -1) | 312 | if (bind(s, (struct sockaddr *)&lsa, lsa_len) == -1) |
| 307 | { | 313 | { |
| 308 | my_error("bind(): %s\n", strerror(errno)); | 314 | my_error("bind(): %s\n", strerror(errno)); |
| 309 | close(s); | 315 | close(s); |
| 310 | return(1); | 316 | return(1); |
| 311 | }; | 317 | }; |
| 312 | 318 | ||
| 313 | return(((opts & MY_SERVER)) ? my_server(s, opts) : my_client(s, opts, &sa)); | 319 | return(((opts & MY_SERVER)) ? my_server(s, opts) : my_client(s, opts, &sa, sa_len)); |
| 314 | } | 320 | } |
| 315 | 321 | ||
| 316 | 322 | ||
| 317 | int my_client( int s, unsigned opts, struct sockaddr_storage * sap ) | 323 | int my_client( int s, unsigned opts, struct sockaddr_storage * sap, socklen_t sa_len ) |
| 318 | { | 324 | { |
| 319 | struct pollfd fds[2]; | 325 | struct pollfd fds[2]; |
| 320 | struct sockaddr_storage sa; | 326 | struct sockaddr_storage sa; |
| 321 | socklen_t sa_len; | ||
| 322 | char buff[4096]; | 327 | char buff[4096]; |
| 323 | ssize_t len; | 328 | ssize_t len; |
| 324 | 329 | ||
| @@ -331,7 +336,7 @@ int my_client( int s, unsigned opts, struct sockaddr_storage * sap ) | |||
| 331 | 336 | ||
| 332 | // connects to remote host | 337 | // connects to remote host |
| 333 | my_verbose(opts, "connecting to \"%s\" ...", my_ntop(sap, buff, sizeof(buff))); | 338 | my_verbose(opts, "connecting to \"%s\" ...", my_ntop(sap, buff, sizeof(buff))); |
| 334 | if (connect(s, (struct sockaddr *)sap, sap->ss_len) == -1) | 339 | if (connect(s, (struct sockaddr *)sap, sa_len) == -1) |
| 335 | { | 340 | { |
| 336 | my_error("connect(): %s\n", strerror(errno)); | 341 | my_error("connect(): %s\n", strerror(errno)); |
| 337 | close(s); | 342 | close(s); |
