@@ -35,10 +35,10 @@ def error_received(self, exc: Exception):
3535 """Error Received."""
3636 _LOGGER .error ("Socket at: %s received error: %s" , self .sock .getsockname (), exc )
3737
38- async def recv (
38+ async def recvfrom (
3939 self , timeout : float = None
4040 ) -> Optional [tuple [bytes , tuple [str , int ]]]:
41- """Return received data."""
41+ """Return received data and addr ."""
4242 if self .has_callback :
4343 return None
4444 try :
@@ -47,17 +47,26 @@ async def recv(
4747 pass
4848 return None
4949
50+ async def recv (self , timeout : float = None ) -> Optional [bytes ]:
51+ """Return received data."""
52+ if self .has_callback :
53+ return None
54+ response = await self .recvfrom (timeout = timeout )
55+ if response :
56+ return response [0 ]
57+ return None
58+
5059 def sendto (self , data : bytes , * _ ):
5160 """Send packet."""
5261 raise NotImplementedError
5362
5463 def set_callback (
5564 self , callback : Union [Callable [[bytes , tuple [str , int ]], None ], None ]
5665 ):
57- """Set callback for datagram received.
66+ """Set callback for data received.
5867
5968 Setting this will flush packet received packet queue.
60- :meth:`recv() <pyremoteplay.socket.AsyncUDPProtocol .recv>`
69+ :meth:`recv() <pyremoteplay.socket.AsyncBaseSocket .recv>`
6170 will always return None.
6271
6372 :param callback: callback for data received
@@ -121,7 +130,7 @@ def data_received(self, data: bytes):
121130 self ._packets .put_nowait (item )
122131
123132 def sendto (self , data : bytes , * _ ):
124- """Send packet."""
133+ """Send packet to address ."""
125134 self ._transport .write (data )
126135
127136
@@ -140,21 +149,9 @@ def datagram_received(self, data: bytes, addr: tuple[str, int]):
140149 else :
141150 self ._packets .put_nowait (item )
142151
143- async def recv (
144- self , timeout : float = None
145- ) -> Optional [tuple [bytes , tuple [str , int ]]]:
146- """Return received data."""
147- if self .has_callback :
148- return None
149- try :
150- return await asyncio .wait_for (self ._packets .get (), timeout = timeout )
151- except (asyncio .TimeoutError , asyncio .CancelledError ):
152- pass
153- return None
154-
155152 # pylint: disable=arguments-differ
156153 def sendto (self , data : bytes , addr : tuple [str , int ] = None ):
157- """Send packet."""
154+ """Send packet to address ."""
158155 self ._transport .sendto (data , addr )
159156
160157
@@ -194,7 +191,7 @@ def sendto(self, data: bytes, addr: tuple[str, int] = None):
194191 """Send Packet"""
195192 self ._protocol .sendto (data , addr )
196193
197- async def recv (self , timeout : float = None ):
194+ async def recv (self , timeout : float = None ) -> Optional [ bytes ] :
198195 """Receive a packet."""
199196
200197 packet = await self ._protocol .recv (timeout )
@@ -204,6 +201,18 @@ async def recv(self, timeout: float = None):
204201
205202 return packet
206203
204+ async def recvfrom (
205+ self , timeout : float = None
206+ ) -> Optional [tuple [bytes , tuple [str , int ]]]:
207+ """Receive a packet and address."""
208+
209+ response = await self ._protocol .recvfrom (timeout )
210+
211+ if response is None and self ._protocol .closed :
212+ raise OSError ("Socket is closed" )
213+
214+ return response
215+
207216 def get_extra_info (self , name : str , default : Any = None ) -> Any :
208217 """Return Extra Info."""
209218 return self ._protocol .get_extra_info (name , default )
@@ -215,7 +224,7 @@ def setsockopt(self, __level: int, __optname: int, __value: int | bytes, /):
215224 def set_callback (
216225 self , callback : Union [Callable [[bytes , tuple [str , int ]], None ], None ]
217226 ):
218- """Set callback for datagram received.
227+ """Set callback for data received.
219228
220229 Setting this will flush packet received packet queue.
221230 :meth:`recv() <pyremoteplay.socket.AsyncBaseSocket.recv>`
0 commit comments