Changes in uspace/srv/net/udp/assoc.c [c0f3460:451481c8] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/udp/assoc.c
rc0f3460 r451481c8 82 82 if (lsock != NULL) 83 83 assoc->ident.local = *lsock; 84 85 84 if (fsock != NULL) 86 85 assoc->ident.foreign = *fsock; … … 252 251 sp.foreign = *fsock; 253 252 254 if ((inet_addr_is_any(&sp.foreign.addr)) || 255 (sp.foreign.port == UDP_PORT_ANY)) 253 if (sp.foreign.addr.ipv4 == 0 || sp.foreign.port == 0) 256 254 return EINVAL; 257 255 … … 281 279 282 280 fibril_mutex_lock(&assoc->lock); 283 while (list_empty(&assoc->rcv_queue) && !assoc->reset) {281 while (list_empty(&assoc->rcv_queue)) { 284 282 log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_recv() - waiting"); 285 283 fibril_condvar_wait(&assoc->rcv_queue_cv, &assoc->lock); 286 }287 288 if (assoc->reset) {289 log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_recv() - association was reset");290 fibril_mutex_unlock(&assoc->lock);291 return ECONNABORTED;292 284 } 293 285 … … 331 323 } 332 324 333 /** Reset association.334 *335 * This causes any pendingreceive operations to return immediately with336 * UDP_ERESET.337 */338 void udp_assoc_reset(udp_assoc_t *assoc)339 {340 fibril_mutex_lock(&assoc->lock);341 assoc->reset = true;342 fibril_condvar_broadcast(&assoc->rcv_queue_cv);343 fibril_mutex_unlock(&assoc->lock);344 }345 346 325 static int udp_assoc_queue_msg(udp_assoc_t *assoc, udp_sockpair_t *sp, 347 326 udp_msg_t *msg) … … 372 351 static bool udp_socket_match(udp_sock_t *sock, udp_sock_t *patt) 373 352 { 374 log_msg(LOG_DEFAULT, LVL_DEBUG, 375 "udp_socket_match(sock=(%u), pat=(%u))", sock->port, patt->port);376 377 if ( (!inet_addr_is_any(&patt->addr))&&378 (!inet_addr_compare(&patt->addr, &sock->addr)))353 log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_socket_match(sock=(%x,%u), pat=(%x,%u))", 354 sock->addr.ipv4, sock->port, patt->addr.ipv4, patt->port); 355 356 if (patt->addr.ipv4 != UDP_IPV4_ANY && 357 patt->addr.ipv4 != sock->addr.ipv4) 379 358 return false; 380 381 if ( (patt->port != UDP_PORT_ANY)&&382 (patt->port != sock->port))359 360 if (patt->port != UDP_PORT_ANY && 361 patt->port != sock->port) 383 362 return false; 384 363 385 364 log_msg(LOG_DEFAULT, LVL_DEBUG, " -> match"); 386 365 387 366 return true; 388 367 } … … 416 395 { 417 396 log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_assoc_find_ref(%p)", sp); 418 397 419 398 fibril_mutex_lock(&assoc_list_lock); 420 399 421 400 list_foreach(assoc_list, link) { 422 401 udp_assoc_t *assoc = list_get_instance(link, udp_assoc_t, link); 423 402 udp_sockpair_t *asp = &assoc->ident; 424 403 log_msg(LOG_DEFAULT, LVL_DEBUG, "compare with assoc (f:(%x,%u), l:(%x,%u))", 404 asp->foreign.addr.ipv4, asp->foreign.port, 405 asp->local.addr.ipv4, asp->local.port); 406 425 407 /* Skip unbound associations */ 426 408 if (asp->local.port == UDP_PORT_ANY) 427 409 continue; 428 410 429 411 if (udp_sockpair_match(sp, asp)) { 430 412 log_msg(LOG_DEFAULT, LVL_DEBUG, "Returning assoc %p", assoc); … … 434 416 } 435 417 } 436 418 437 419 fibril_mutex_unlock(&assoc_list_lock); 438 420 return NULL;
Note:
See TracChangeset
for help on using the changeset viewer.