|
9 | 9 | #include <memory> |
10 | 10 | #include <utility> |
11 | 11 |
|
| 12 | +#include <sys/socket.h> |
12 | 13 | #include <sys/uio.h> |
13 | 14 |
|
14 | 15 | namespace silk |
@@ -412,6 +413,62 @@ class FiberScheduler |
412 | 413 | */ |
413 | 414 | static void poll(int fd, uint32_t events, uint64_t * triggeredEvents, IoFuture * future) noexcept; |
414 | 415 |
|
| 416 | + /** |
| 417 | + * Blocking connect: connect @p fd to @p addr. |
| 418 | + * |
| 419 | + * @param fd File descriptor to connect. |
| 420 | + * @param addr Destination address. |
| 421 | + * @param addrlen Length of @p addr. |
| 422 | + * @return 0 on success, or a errno on failure. |
| 423 | + */ |
| 424 | + static int connect(int fd, const sockaddr * addr, socklen_t addrlen) noexcept |
| 425 | + { |
| 426 | + IoFuture future; |
| 427 | + connect(fd, addr, addrlen, &future); |
| 428 | + return future.wait(); |
| 429 | + } |
| 430 | + |
| 431 | + /** |
| 432 | + * Async connect. Returns immediately; the caller must wait on @p future |
| 433 | + * for the result. |
| 434 | + * |
| 435 | + * @param fd File descriptor to connect. |
| 436 | + * @param addr Destination address; must remain valid until @p future completes. |
| 437 | + * @param addrlen Length of @p addr. |
| 438 | + * @param future Completion handle; wait() returns 0 on success or a errno on failure. |
| 439 | + */ |
| 440 | + static void connect(int fd, const sockaddr * addr, socklen_t addrlen, IoFuture * future) noexcept; |
| 441 | + |
| 442 | + /** |
| 443 | + * Blocking accept: accept a connection on the listening socket @p fd. |
| 444 | + * |
| 445 | + * @param fd Listening socket to accept on. |
| 446 | + * @param addr If not null, receives the peer address. |
| 447 | + * @param addrlen In/out length of @p addr; ignored if @p addr is null. |
| 448 | + * @param flags accept4() flags applied to the accepted socket (e.g. SOCK_CLOEXEC). |
| 449 | + * @param acceptedFd If not null, receives the accepted socket fd on success. |
| 450 | + * @return 0 on success, or a errno on failure. |
| 451 | + */ |
| 452 | + static int accept(int fd, sockaddr * addr, socklen_t * addrlen, int flags, uint64_t * acceptedFd = nullptr) noexcept |
| 453 | + { |
| 454 | + IoFuture future; |
| 455 | + accept(fd, addr, addrlen, flags, acceptedFd, &future); |
| 456 | + return future.wait(); |
| 457 | + } |
| 458 | + |
| 459 | + /** |
| 460 | + * Async accept. Returns immediately; the caller must wait on @p future |
| 461 | + * for the result. |
| 462 | + * |
| 463 | + * @param fd Listening socket to accept on. |
| 464 | + * @param addr If not null, receives the peer address; must remain valid until @p future completes. |
| 465 | + * @param addrlen In/out length of @p addr; must remain valid until @p future completes; ignored if @p addr is null. |
| 466 | + * @param flags accept4() flags applied to the accepted socket (e.g. SOCK_CLOEXEC). |
| 467 | + * @param acceptedFd If not null, receives the accepted socket fd on success. |
| 468 | + * @param future Completion handle; wait() returns 0 on success or a errno on failure. |
| 469 | + */ |
| 470 | + static void accept(int fd, sockaddr * addr, socklen_t * addrlen, int flags, uint64_t * acceptedFd, IoFuture * future) noexcept; |
| 471 | + |
415 | 472 | /** |
416 | 473 | * Completion handle for an async sleep submitted via sleep(). |
417 | 474 | */ |
|
0 commit comments