/// <summary>
/// Open client socket.
/// </summary>
public static PhpResource stream_socket_server(Context ctx, string localSocket, out int errno, out string errstr, SocketOptions flags, PhpResource context)
{
// defaults:
errno = 0;
errstr = string.Empty;
var sc = StreamContext.GetValid(context);
if (sc == null)
{
return(null);
}
//
int port = 0;
if (TryParseSocketAddr(localSocket, out _, out var protocol, ref port, out var address))
{
try
{
var socket = new Socket(address.AddressFamily, SocketType.Stream, protocol);
socket.Bind(new IPEndPoint(address, port));
//socket.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName.MaxConnections) // Not Supported
socket.Listen(512); // NOTE: a default backlog should be used
return(new SocketStream(ctx, socket, localSocket, sc));
}
catch (SocketException e)
{
errno = e.ErrorCode;
errstr = e.Message;
return(null);
}
}