1/* 2 * Copyright 2011, Axel Dörfler, axeld@pinc-software.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include <Socket.h> 8 9 10//#define TRACE_SOCKET 11#ifdef TRACE_SOCKET 12# define TRACE(x...) printf(x) 13#else 14# define TRACE(x...) ; 15#endif 16 17 18BSocket::BSocket() 19{ 20} 21 22 23BSocket::BSocket(const BNetworkAddress& peer, bigtime_t timeout) 24{ 25 Connect(peer, timeout); 26} 27 28 29BSocket::BSocket(const BSocket& other) 30 : 31 BAbstractSocket(other) 32{ 33} 34 35 36BSocket::~BSocket() 37{ 38} 39 40 41status_t 42BSocket::Bind(const BNetworkAddress& local) 43{ 44 return BAbstractSocket::Bind(local, SOCK_STREAM); 45} 46 47 48status_t 49BSocket::Connect(const BNetworkAddress& peer, bigtime_t timeout) 50{ 51 return BAbstractSocket::Connect(peer, SOCK_STREAM, timeout); 52} 53 54 55// #pragma mark - BDataIO implementation 56 57 58ssize_t 59BSocket::Read(void* buffer, size_t size) 60{ 61 ssize_t bytesReceived = recv(Socket(), buffer, size, 0); 62 if (bytesReceived < 0) { 63 TRACE("%p: BSocket::Read() error: %s\n", this, strerror(errno)); 64 return errno; 65 } 66 67 return bytesReceived; 68} 69 70 71ssize_t 72BSocket::Write(const void* buffer, size_t size) 73{ 74 ssize_t bytesSent = send(Socket(), buffer, size, 0); 75 if (bytesSent < 0) { 76 TRACE("%p: BSocket::Write() error: %s\n", this, strerror(errno)); 77 return errno; 78 } 79 80 return bytesSent; 81} 82 83 84// #pragma mark - private 85 86 87void 88BSocket::_SetTo(int fd, const BNetworkAddress& local, 89 const BNetworkAddress& peer) 90{ 91 Disconnect(); 92 93 fInitStatus = B_OK; 94 fSocket = fd; 95 fLocal = local; 96 fPeer = peer; 97 98 TRACE("%p: accepted from %s to %s\n", this, local.ToString().c_str(), 99 peer.ToString().c_str()); 100} 101