"====================================================================== | | DatagramSocket wrapper class | | $Revision: 1.7.5$ | $Date: 2000/05/28 16:56:52$ | $Author: pb$ | ======================================================================" "====================================================================== | | Copyright 1988-92, 1994-95, 1999, 2000 Free Software Foundation, Inc. | Written by Paolo Bonzini. | | This file is part of the GNU Smalltalk class library. | | The GNU Smalltalk class library is free software; you can redistribute it | and/or modify it under the terms of the GNU Lesser General Public License | as published by the Free Software Foundation; either version 2.1, or (at | your option) any later version. | | The GNU Smalltalk class library is distributed in the hope that it will be | useful, but WITHOUT ANY WARRANTY; without even the implied warranty of | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser | General Public License for more details. | | You should have received a copy of the GNU Lesser General Public License | along with the GNU Smalltalk class library; see the file COPYING.LESSER. | If not, write to the Free Software Foundation, 59 Temple Place - Suite | 330, Boston, MA 02111-1307, USA. | ======================================================================" AbstractSocket subclass: #DatagramSocket instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Sockets-Streams' ! !DatagramSocket class methodsFor: 'initialization'! initialize DatagramSocket defaultImplementationClass: UDPSocketImpl ! ! !DatagramSocket class methodsFor: 'instance creation'! new ^self local: nil port: 0 ! port: localPort ^self local: nil port: localPort ! local: ipAddress port: localPort (localPort < 0) | (localPort > 16rFFFF) ifTrue: [ self error: 'port out of range' ]. ^super new local: ipAddress port: localPort ! ! !DatagramSocket methodsFor: 'accessing'! address ^self localAddress ! nextPut: aDatagram self waitUntil: [ self implementation canRead ] then: [ self implementation nextPut: aDatagram. aDatagram ] onTimeoutDo: [ nil ] ! port ^self localPort ! peek ^self waitUntil: [ self implementation canRead ] then: [ self implementation peek ] onTimeoutDo: [ nil ] ! peek: datagram self waitUntil: [ self implementation canRead ] then: [ self implementation peek: datagram. true ] onTimeoutDo: [ false ] ! receive: datagram self waitUntil: [ self implementation canRead ] then: [ self implementation receive: datagram. true ] onTimeoutDo: [ false ] ! ! !DatagramSocket methodsFor: 'direct operations'! nextFrom: ipAddress port: port self waitUntil: [ self implementation canRead ] then: [ self implementation nextFrom: ipAddress port: port ] onTimeoutDo: [ nil ] ! ! !DatagramSocket methodsFor: 'private'! create self implementation create ! local: ipAddress port: localPort self create. self implementation bindTo: (ipAddress isNil ifTrue: [ IPAddress anyLocalAddress ] ifFalse: [ ipAddress ]) port: localPort. ! !