Changeset 1d4b815 in mainline for uspace/lib/c/generic/inet/tcp.c
- Timestamp:
- 2015-05-09T19:05:48Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 309469de
- Parents:
- 779541b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/inet/tcp.c
r779541b r1d4b815 274 274 int tcp_conn_wait_connected(tcp_conn_t *conn) 275 275 { 276 async_usleep(1000 * 1000); 277 return 0; 276 fibril_mutex_lock(&conn->lock); 277 while (!conn->connected && !conn->conn_failed && !conn->conn_reset) 278 fibril_condvar_wait(&conn->cv, &conn->lock); 279 280 if (conn->connected) { 281 fibril_mutex_unlock(&conn->lock); 282 return EOK; 283 } else { 284 assert(conn->conn_failed || conn->conn_reset); 285 fibril_mutex_unlock(&conn->lock); 286 return EIO; 287 } 278 288 } 279 289 … … 442 452 static void tcp_ev_connected(tcp_t *tcp, ipc_callid_t iid, ipc_call_t *icall) 443 453 { 454 tcp_conn_t *conn; 455 sysarg_t conn_id; 456 int rc; 457 444 458 printf("tcp_ev_connected()\n"); 445 async_answer_0(iid, ENOTSUP); 459 conn_id = IPC_GET_ARG1(*icall); 460 461 rc = tcp_conn_get(tcp, conn_id, &conn); 462 if (rc != EOK) { 463 printf("conn ID %zu not found\n", 464 conn_id); 465 async_answer_0(iid, ENOENT); 466 return; 467 } 468 469 fibril_mutex_lock(&conn->lock); 470 conn->connected = true; 471 fibril_condvar_broadcast(&conn->cv); 472 fibril_mutex_unlock(&conn->lock); 473 474 async_answer_0(iid, EOK); 446 475 } 447 476 448 477 static void tcp_ev_conn_failed(tcp_t *tcp, ipc_callid_t iid, ipc_call_t *icall) 449 478 { 479 tcp_conn_t *conn; 480 sysarg_t conn_id; 481 int rc; 482 450 483 printf("tcp_ev_conn_failed()\n"); 451 async_answer_0(iid, ENOTSUP); 484 conn_id = IPC_GET_ARG1(*icall); 485 486 rc = tcp_conn_get(tcp, conn_id, &conn); 487 if (rc != EOK) { 488 printf("conn ID %zu not found\n", 489 conn_id); 490 async_answer_0(iid, ENOENT); 491 return; 492 } 493 494 fibril_mutex_lock(&conn->lock); 495 conn->conn_failed = true; 496 fibril_condvar_broadcast(&conn->cv); 497 fibril_mutex_unlock(&conn->lock); 498 499 async_answer_0(iid, EOK); 452 500 } 453 501 454 502 static void tcp_ev_conn_reset(tcp_t *tcp, ipc_callid_t iid, ipc_call_t *icall) 455 503 { 504 tcp_conn_t *conn; 505 sysarg_t conn_id; 506 int rc; 507 456 508 printf("tcp_ev_conn_reset()\n"); 457 async_answer_0(iid, ENOTSUP); 509 conn_id = IPC_GET_ARG1(*icall); 510 511 rc = tcp_conn_get(tcp, conn_id, &conn); 512 if (rc != EOK) { 513 printf("conn ID %zu not found\n", 514 conn_id); 515 async_answer_0(iid, ENOENT); 516 return; 517 } 518 519 fibril_mutex_lock(&conn->lock); 520 conn->conn_reset = true; 521 fibril_condvar_broadcast(&conn->cv); 522 fibril_mutex_unlock(&conn->lock); 523 524 async_answer_0(iid, EOK); 458 525 } 459 526
Note:
See TracChangeset
for help on using the changeset viewer.