Трудно сказать, не видя код.
Но я предполагаю, что у вас есть чередующиеся объявления и код. Компилятор C MSVC - только C89, который его не поддерживает. Это объясняет, почему компилятор C ++ принимает его, а компилятор C - нет.
До C99 все объявления должны быть в начале функции или блока.
РЕДАКТИРОВАТЬ: Ваш код не показывает всю функцию, но у вас, вероятно, есть некоторый (не декларативный) код до объявления SOCKET socketobj;
.
Теперь, когда показана полная функция, это подтверждает, что вы чередуете объявления и код:
WORD wVersionRequested; // Declaration: ok
WSADATA wsaData; // Declaration: ok
int wsaerr; // Declaration: ok
wVersionRequested = MAKEWORD(2,2); // Code: ok
...
SOCKET socketobj; // Declaration: NOT ok
socketobj = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
Решение здесь - переместить SOCKET socketobj;
в начало функции с другими объявлениями.