Skip to content

Commit 6bb6c0f

Browse files
committed
Fixes socket helper
1 parent 88d1f11 commit 6bb6c0f

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

Projects/Server/Network/SocketHelper.cs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,13 @@ private static IPAddress ParseSockAddr(ReadOnlySpan<byte> buffer)
144144
return null;
145145
}
146146

147-
// First two bytes are address family (little-endian on most platforms)
148-
var family = (AddressFamily)BitConverter.ToInt16(buffer);
147+
// macOS/BSD: sockaddr has sin_len (1 byte) + sin_family (1 byte)
148+
// Linux: sockaddr has sa_family (2 bytes)
149+
var isBsd = RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ||
150+
RuntimeInformation.IsOSPlatform(OSPlatform.FreeBSD);
151+
var family = isBsd
152+
? (AddressFamily)buffer[1] // BSD: family is second byte
153+
: (AddressFamily)BitConverter.ToInt16(buffer); // Linux: family is first 2 bytes
149154

150155
if (family == AddressFamily.InterNetwork && buffer.Length >= 8)
151156
{
@@ -169,9 +174,15 @@ private static IPEndPoint ParseSockAddrEndPoint(ReadOnlySpan<byte> buffer)
169174
return null;
170175
}
171176

172-
// First two bytes are address family (little-endian on most platforms)
173-
var family = (AddressFamily)BitConverter.ToInt16(buffer);
174-
// Port is in network byte order (big-endian)
177+
// macOS/BSD: sockaddr has sin_len (1 byte) + sin_family (1 byte)
178+
// Linux: sockaddr has sa_family (2 bytes)
179+
var isBsd = RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ||
180+
RuntimeInformation.IsOSPlatform(OSPlatform.FreeBSD);
181+
var family = isBsd
182+
? (AddressFamily)buffer[1] // BSD: family is second byte
183+
: (AddressFamily)BitConverter.ToInt16(buffer); // Linux: family is first 2 bytes
184+
185+
// Port is in network byte order (big-endian), at offset 2 on both platforms
175186
var port = (buffer[2] << 8) | buffer[3];
176187

177188
if (family == AddressFamily.InterNetwork && buffer.Length >= 8)

0 commit comments

Comments
 (0)