null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
⌂
C언어 실전 코드 패턴
Structure
struct
•
구조체 배열 선언과 초기화
•
구조체 포인터 접근하는 법
•
Swap 함수를 구조체에 적용하기
•
연결리스트 삽입·삭제·정렬
memory-pointer
•
malloc·free 사용 패턴
•
포인터로 Swap 구현하기
•
배열 복사 — memcpy vs 루프 비교
string-impl
•
strlen을 직접 짜면
•
strcpy를 직접 짜면
•
strcat·strcmp 구현과 안전한 대안
const-module
•
const 올바른 사용법
•
.h 파일과 .c 파일 역할 구분
•
파일 입출력 패턴
practical-tricks
•
가변길이 배열 파라미터 처리
•
!! 이중 부정 연산자
•
Windows 소켓 에러 모음
•
미니 프로젝트 — 영타 연습기 만들기
Flow Structure
!! 이중 부정 연산자
16 / 17
미니 프로젝트 — 영타 연습기 만들기
☆ Star
↗ Full
Windows 소켓 에러 모음
#c
#windows
#winsock
#socket
#error
@devpc
|
2026-05-04 12:40:02
|
GET /api/v1/flows/25/nodes/456?fv=1&nv=1
Context:
Flow v1
→
Node v1
0
Views
1
Calls
# Windows 소켓 에러 모음 ## 들어가며 Windows에서 소켓 프로그래밍을 할 때 `<winsock2.h>`와 `<windows.h>` 조합에서 자주 나오는 에러들을 정리한다. --- ## 에러 1: windows.h와 winsock2.h 충돌 ``` error C2011: 'sockaddr' : 'struct' type redefinition ``` `<windows.h>`가 내부적으로 `<winsock.h>` (v1)을 포함하는데, `<winsock2.h>`와 타입이 충돌한다. **해결법**: `<winsock2.h>`를 `<windows.h>`보다 먼저 포함한다. ```c /* 올바른 순서 */ #include <winsock2.h> #include <windows.h> /* 또는 windows.h에서 winsock 제외 */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <winsock2.h> ``` --- ## 에러 2: inet_addr deprecated 경고 ``` warning: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS ``` `inet_addr`는 구형 API로 deprecated되었다. ### 빠른 해결 (경고 억제) ```c #define _WINSOCK_DEPRECATED_NO_WARNINGS #include <winsock2.h> ``` ### 올바른 해결 (신규 API 사용) ```c #include <winsock2.h> #include <ws2tcpip.h> /* inet_addr 대체 */ struct sockaddr_in addr; addr.sin_family = AF_INET; inet_pton(AF_INET, "192.168.0.1", &addr.sin_addr); /* inet_ntoa 대체 */ char ip_str[INET_ADDRSTRLEN]; inet_ntop(AF_INET, &addr.sin_addr, ip_str, sizeof(ip_str)); ``` `inet_pton`(presentation to network)은 문자열 IP → 바이너리, `inet_ntop`(network to presentation)은 바이너리 → 문자열이다. --- ## 에러 3: WSAStartup 누락 ``` error: WSAStartup 호출 없이 소켓 함수 실행 시 WSANOTINITIALISED(10093) ``` Windows 소켓은 사용 전에 초기화가 필요하다. ```c int init_winsock(void) { WSADATA wsa; int ret = WSAStartup(MAKEWORD(2, 2), &wsa); if (ret != 0) { fprintf(stderr, "WSAStartup failed: %d\n", ret); return -1; } return 0; } void cleanup_winsock(void) { WSACleanup(); } ``` 프로그램 시작 시 `init_winsock`, 종료 시 `cleanup_winsock`을 호출한다. --- ## 에러 4: 링크 에러 — ws2_32.lib 누락 ``` LNK2019: unresolved external symbol WSAStartup ``` 컴파일은 되지만 링크가 안 된다. **해결법**: ```c /* 코드에 pragma 추가 */ #pragma comment(lib, "ws2_32.lib") /* 또는 프로젝트 설정에서 Linker → Input → Additional Dependencies → ws2_32.lib 추가 */ ``` --- ## 간단한 TCP 클라이언트 뼈대 ```c #define _WINSOCK_DEPRECATED_NO_WARNINGS #define WIN32_LEAN_AND_MEAN #include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #pragma comment(lib, "ws2_32.lib") int main(void) { WSADATA wsa; WSAStartup(MAKEWORD(2, 2), &wsa); SOCKET s = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in server = {0}; server.sin_family = AF_INET; server.sin_port = htons(8080); inet_pton(AF_INET, "127.0.0.1", &server.sin_addr); connect(s, (struct sockaddr *)&server, sizeof(server)); send(s, "Hello\n", 6, 0); closesocket(s); WSACleanup(); return 0; } ```
!! 이중 부정 연산자
미니 프로젝트 — 영타 연습기 만들기
// COMMENTS
Newest First
ON THIS PAGE
No content selected.