>From b531e7d40a0453e9cdad3b2e6d5aed80f09fef19 Mon Sep 17 00:00:00 2001
From: Holger Hans Peter Freyther
Date: Sat, 12 Jun 2010 11:52:36 +0800
Subject: [PATCH 1/3] UDP: Make it possible to find out how many bytes were received
This makes it possible to see the number of bytes received by
the recvfrom call and such a Datagram can be send using
the #nextPut: selector.
2010-06-12 Holger Hans Peter Freyther
* Datagram.st: Add #dataSize, #dataSize: and #size.
* AbstractSocketImpl.st: Call Datagram>>#dataSize: from the
#receive:datagram selector with the bytes read, use
Datagram>>#size in the #send:to:port selector to only send
a limited amount of bytes from the Datagram>>#data.
---
packages/sockets/AbstractSocketImpl.st | 7 +++--
packages/sockets/ChangeLog | 8 +++++++
packages/sockets/Datagram.st | 36 ++++++++++++++++++++++++++++++-
3 files changed, 46 insertions(+), 5 deletions(-)
diff --git a/packages/sockets/AbstractSocketImpl.st b/packages/sockets/AbstractSocketImpl.st
index a71410e..0e5d8ce 100644
--- a/packages/sockets/AbstractSocketImpl.st
+++ b/packages/sockets/AbstractSocketImpl.st
@@ -647,12 +647,12 @@ implementations.'>
to only peek for it without removing it from the queue."
- | address port data from addrLen fd |
+ | address port data from addrLen fd read |
data := ByteArray new: self bufferSize.
from := ByteArray new: 128.
addrLen := CInt gcValue: 128.
(fd := self fd) isNil ifTrue: [ ^SystemExceptions.EndOfStream signal ].
- self
+ read := self
receive: fd
buffer: data
size: data size
@@ -662,6 +662,7 @@ implementations.'>
port := ValueHolder new.
^aDatagram
data: data;
+ dataSize: read;
address: (SocketAddress fromSockAddr: from port: port);
port: port value;
yourself
@@ -681,7 +682,7 @@ implementations.'>
self
send: fd
buffer: aDatagram data
- size: aDatagram data size
+ size: aDatagram size
flags: self flags
to: receiver
size: size
diff --git a/packages/sockets/ChangeLog b/packages/sockets/ChangeLog
index 4ed3aba..a6ac75e 100644
--- a/packages/sockets/ChangeLog
+++ b/packages/sockets/ChangeLog
@@ -1,3 +1,11 @@
+2010-06-12 Holger Hans Peter Freyther
+
+ * Datagram.st: Add #dataSize, #dataSize: and #size.
+ * AbstractSocketImpl.st: Call Datagram>>#dataSize: from the
+ #receive:datagram selector with the bytes read, use
+ Datagram>>#size in the #send:to:port selector to only send
+ a limited amount of bytes from the Datagram>>#data.
+
2010-03-27 Paolo Bonzini
* AbstractSocketImpl.st: Do not check errno unless a system call
diff --git a/packages/sockets/Datagram.st b/packages/sockets/Datagram.st
index 0793601..a5a3126 100644
--- a/packages/sockets/Datagram.st
+++ b/packages/sockets/Datagram.st
@@ -32,7 +32,7 @@
Object subclass: Datagram [
- | data address port |
+ | data address port dataSize |
"Set the data attached to the datagram"
- data := aByteArray
+ data := aByteArray.
+ dataSize := nil.
]
+ dataSize [
+ "Answer the size of the message."
+
+
+
+ ^dataSize
+ ]
+
+ dataSize: aSize [
+ "I am called to update the size..."
+
+
+
+ dataSize := aSize
+ ]
+
+ size [
+ "I determine the size of the datagram. It is either the specified dataSize or
+ data size."
+
+
+ | result |
+
+ result := dataSize isNil
+ ifTrue: [data size]
+ ifFalse: [dataSize].
+
+ ^ result
+ ]
+
+
get [
"Parse the data attached to the datagram through a newly created
ObjectDumper, and answer the resulting object. This method is
--
1.7.0.1