Avi Drissman | e4622aa | 2022-09-08 20:36:06 | [diff] [blame] | 1 | // Copyright 2012 The Chromium Authors |
bbudge@chromium.org | d0bac29 | 2012-02-29 16:10:45 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include "base/sync_socket.h" |
| 6 | |
| 7 | #include <errno.h> |
| 8 | #include <limits.h> |
avi | 9b6f4293 | 2015-12-26 22:15:14 | [diff] [blame] | 9 | #include <stddef.h> |
bbudge@chromium.org | d0bac29 | 2012-02-29 16:10:45 | [diff] [blame] | 10 | #include <stdio.h> |
| 11 | #include <sys/types.h> |
Austin Sullivan | edf168fd | 2024-01-17 21:37:20 | [diff] [blame] | 12 | #include <unistd.h> |
bbudge@chromium.org | d0bac29 | 2012-02-29 16:10:45 | [diff] [blame] | 13 | |
Austin Sullivan | edf168fd | 2024-01-17 21:37:20 | [diff] [blame] | 14 | #include "base/containers/span.h" |
Peter Boström | 6e2fd08 | 2024-01-23 01:17:55 | [diff] [blame] | 15 | #include "base/notimplemented.h" |
bbudge@chromium.org | d0bac29 | 2012-02-29 16:10:45 | [diff] [blame] | 16 | |
bbudge@chromium.org | d0bac29 | 2012-02-29 16:10:45 | [diff] [blame] | 17 | namespace base { |
| 18 | |
bbudge@chromium.org | d0bac29 | 2012-02-29 16:10:45 | [diff] [blame] | 19 | // static |
| 20 | bool SyncSocket::CreatePair(SyncSocket* socket_a, SyncSocket* socket_b) { |
| 21 | return false; |
| 22 | } |
| 23 | |
Robert Sesek | 6ab73b02 | 2020-02-13 16:42:39 | [diff] [blame] | 24 | void SyncSocket::Close() { |
| 25 | handle_.reset(); |
bbudge@chromium.org | d0bac29 | 2012-02-29 16:10:45 | [diff] [blame] | 26 | } |
| 27 | |
Austin Sullivan | edf168fd | 2024-01-17 21:37:20 | [diff] [blame] | 28 | size_t SyncSocket::Send(span<const uint8_t> data) { |
| 29 | const ssize_t bytes_written = write(handle(), data.data(), data.size()); |
Peter Kasting | 2f61c8b | 2022-07-19 23:43:46 | [diff] [blame] | 30 | return bytes_written > 0 ? static_cast<size_t>(bytes_written) : 0; |
bbudge@chromium.org | d0bac29 | 2012-02-29 16:10:45 | [diff] [blame] | 31 | } |
| 32 | |
Austin Sullivan | edf168fd | 2024-01-17 21:37:20 | [diff] [blame] | 33 | size_t SyncSocket::Send(const void* buffer, size_t length) { |
| 34 | return Send(make_span(static_cast<const uint8_t*>(buffer), length)); |
| 35 | } |
| 36 | |
| 37 | size_t SyncSocket::Receive(span<uint8_t> buffer) { |
| 38 | const ssize_t bytes_read = read(handle(), buffer.data(), buffer.size()); |
Peter Kasting | 2f61c8b | 2022-07-19 23:43:46 | [diff] [blame] | 39 | return bytes_read > 0 ? static_cast<size_t>(bytes_read) : 0; |
bbudge@chromium.org | d0bac29 | 2012-02-29 16:10:45 | [diff] [blame] | 40 | } |
| 41 | |
Austin Sullivan | edf168fd | 2024-01-17 21:37:20 | [diff] [blame] | 42 | size_t SyncSocket::Receive(void* buffer, size_t length) { |
| 43 | return Receive(make_span(static_cast<uint8_t*>(buffer), length)); |
| 44 | } |
| 45 | |
| 46 | size_t SyncSocket::ReceiveWithTimeout(span<uint8_t> buffer, TimeDelta timeout) { |
| 47 | NOTIMPLEMENTED(); |
| 48 | return 0; |
| 49 | } |
| 50 | |
| 51 | size_t SyncSocket::ReceiveWithTimeout(void* buffer, |
| 52 | size_t length, |
| 53 | TimeDelta timeout) { |
dalecurtis@chromium.org | 62558f1 | 2013-10-19 22:13:19 | [diff] [blame] | 54 | NOTIMPLEMENTED(); |
| 55 | return 0; |
| 56 | } |
| 57 | |
bbudge@chromium.org | d0bac29 | 2012-02-29 16:10:45 | [diff] [blame] | 58 | size_t SyncSocket::Peek() { |
dalecurtis@chromium.org | c124bdb | 2013-10-21 20:09:52 | [diff] [blame] | 59 | NOTIMPLEMENTED(); |
| 60 | return 0; |
bbudge@chromium.org | d0bac29 | 2012-02-29 16:10:45 | [diff] [blame] | 61 | } |
| 62 | |
Robert Sesek | 6ab73b02 | 2020-02-13 16:42:39 | [diff] [blame] | 63 | bool SyncSocket::IsValid() const { |
| 64 | return handle_.is_valid(); |
| 65 | } |
| 66 | |
| 67 | SyncSocket::Handle SyncSocket::handle() const { |
| 68 | return handle_.get(); |
| 69 | } |
| 70 | |
maxmorin | d4bcb11 | 2017-04-13 11:43:13 | [diff] [blame] | 71 | SyncSocket::Handle SyncSocket::Release() { |
Robert Sesek | 6ab73b02 | 2020-02-13 16:42:39 | [diff] [blame] | 72 | return handle_.release(); |
bbudge@chromium.org | d0bac29 | 2012-02-29 16:10:45 | [diff] [blame] | 73 | } |
| 74 | |
Austin Sullivan | edf168fd | 2024-01-17 21:37:20 | [diff] [blame] | 75 | size_t CancelableSyncSocket::Send(span<const uint8_t> data) { |
| 76 | return SyncSocket::Send(data); |
| 77 | } |
| 78 | |
bbudge@chromium.org | 771fc8d | 2012-05-19 01:39:05 | [diff] [blame] | 79 | size_t CancelableSyncSocket::Send(const void* buffer, size_t length) { |
Austin Sullivan | edf168fd | 2024-01-17 21:37:20 | [diff] [blame] | 80 | return Send(make_span(static_cast<const uint8_t*>(buffer), length)); |
bbudge@chromium.org | 771fc8d | 2012-05-19 01:39:05 | [diff] [blame] | 81 | } |
| 82 | |
bbudge@chromium.org | d0bac29 | 2012-02-29 16:10:45 | [diff] [blame] | 83 | bool CancelableSyncSocket::Shutdown() { |
Robert Sesek | 6ab73b02 | 2020-02-13 16:42:39 | [diff] [blame] | 84 | Close(); |
| 85 | return true; |
bbudge@chromium.org | d0bac29 | 2012-02-29 16:10:45 | [diff] [blame] | 86 | } |
| 87 | |
| 88 | // static |
| 89 | bool CancelableSyncSocket::CreatePair(CancelableSyncSocket* socket_a, |
| 90 | CancelableSyncSocket* socket_b) { |
| 91 | return SyncSocket::CreatePair(socket_a, socket_b); |
| 92 | } |
| 93 | |
| 94 | } // namespace base |