Ковыряю исходники System.IO.Pipelines.Networking.Windows.RIO, непонятен следующий момент:
public unsafe static RegisteredIO Initalize(IntPtr socket)
{
UInt32 dwBytes = 0;
RioExtensionFunctionTable rio = new RioExtensionFunctionTable();
Guid rioFunctionsTableId = new Guid("8509e081-96dd-4005-b165-9e2ee8c79e3f");
int True = -1;
int result = setsockopt(socket, IPPROTO_TCP, TcpNodelay, (char*)&True, 4);
if (result != 0)
{
var error = WSAGetLastError();
throw new Exception($"ERROR: setsockopt TCP_NODELAY returned {error}");
}
}
Как int True может быть равно -1? Это какая то магия между управляемым и неуправляемым кодом или банально ошибка?
По идее должно было хватить и единицы, но -1 в битовом представлении будет давать все единицы, что как бы дает максимально отличный от нуля вариант. А так как всё, не являющееся нулем есть истина, то и минус единица вполне подходит.
Явной булевой переменной тут вообще не используется при передаче между управляемым и неуправляемым кодом. Поэтому о каких-то особенностях в этом плане говорить не приходится.
Продвижение своими сайтами как стратегия роста и независимости