Мой предпочтительный язык сценариев был бы Lua в эти дни. Это является маленьким, быстро, чистый, полностью зарегистрированный, хорошо поддерживаемый, имеет великое сообщество , это используется многими крупными компаниями в промышленность (Adobe, Снежная буря, Игры EA), определенно стоящий попытки.
Для использования его с языками.NET проект LuaInterface обеспечит все, в чем Вы нуждаетесь.
Основная проблема заключается в том, что у вас неправильная проверка на наличие ошибки в socket (). socket () вернет -1 в случае ошибки, а не 0 в случае успеха. Вы можете получить хорошее значение сокета (2, 3 и т. Д.) И рассматривать его как ошибку.
Существует также вторая проблема в том, как вы заключаете свой код в скобки. Когда вы пишете:
if (sockfd = socket(add_res->ai_family, add_res->ai_socktype, add_res->ai_protocol) != 0)
Это обрабатывается как:
if (sockfd = (socket(add_res->ai_family, add_res->ai_socktype, add_res->ai_protocol) != 0))
Таким образом, sockfd не будет присвоено возвращаемое значение сокета, а будет присвоено значение сравнения его с 0. Исправляя обе проблемы, вы должны написать:
if ((sockfd = socket(add_res->ai_family, add_res->ai_socktype, add_res->ai_protocol)) == -1)
Я считаю, что вам следует указать тип сокета, который вам нужен. Когда вы говорите:
add_info.ai_family = AF_UNSPEC;
, вы должны сказать:
add_info.ai_family = AF_INET;