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