MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / recv

Method recv

pcsx2/DEV9/sockets.cpp:201–258  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

199}
200
201bool SocketAdapter::recv(NetPacket* pkt)
202{
203 if (NetAdapter::recv(pkt))
204 return true;
205
206 ScopedGuard cleanup([&]() {
207 // Garbage collect closed connections
208 if (deleteQueueRecvThread.size() != 0)
209 {
210 std::lock_guard deletelock(deleteRecvSentry);
211 for (BaseSession* s : deleteQueueRecvThread)
212 delete s;
213 deleteQueueRecvThread.clear();
214 }
215 });
216
217 EthernetFrame* bFrame;
218 if (!vRecBuffer.Dequeue(&bFrame))
219 {
220 std::lock_guard deletelock(deleteSendSentry);
221 std::vector<ConnectionKey> keys = connections.GetKeys();
222 for (size_t i = 0; i < keys.size(); i++)
223 {
224 const ConnectionKey key = keys[i];
225
226 BaseSession* session;
227 if (!connections.TryGetValue(key, &session))
228 continue;
229
230 std::optional<ReceivedPayload> pl = session->Recv();
231
232 if (pl.has_value())
233 {
234 IP_Packet* ipPkt = new IP_Packet(pl->payload.release());
235 ipPkt->destinationIP = session->sourceIP;
236 ipPkt->sourceIP = pl->sourceIP;
237
238 EthernetFrame frame(ipPkt);
239 frame.sourceMAC = internalMAC;
240 frame.destinationMAC = ps2MAC;
241 frame.protocol = static_cast<u16>(EtherType::IPv4);
242
243 frame.WritePacket(pkt);
244 InspectRecv(pkt);
245 return true;
246 }
247 }
248 }
249 else
250 {
251 bFrame->WritePacket(pkt);
252 InspectRecv(pkt);
253
254 delete bFrame;
255 return true;
256 }
257 return false;
258}

Callers

nothing calls this directly

Calls 8

DequeueMethod · 0.80
GetKeysMethod · 0.80
WritePacketMethod · 0.80
sizeMethod · 0.45
clearMethod · 0.45
TryGetValueMethod · 0.45
RecvMethod · 0.45
releaseMethod · 0.45

Tested by

no test coverage detected