---
title: "TCP socket connect - return값에 대한 문의"
url: "https://maker.wiznet.io/forum/10833"
markdown_url: "https://maker.wiznet.io/forum/10833/md"
type: "Forum topic"
category: "Ethernet Chips"
author: "dohga"
created: "2015-02-10T05:55:22+09:00"
last_activity: "2017-05-04T08:34:50+09:00"
language: "ko"
views: 1336
replies: 1
source: "WIZnet Makers forum (https://maker.wiznet.io/forum/)"
---

# TCP socket connect - return값에 대한 문의

## Question

Asked by dohga on 2015-02-10 in Ethernet Chips.

arm cortex M4 MCU와 w5500을 사용 중입니다.

TCP client 으로만 동작하며, 개략적으로 아래 4가지 동작의 반복입니다.

1. socket(sn, Sn_MR_TCP, usPort, 0);

2. connect(sn, Domain_IP, usPort);

3. send(sn, (_u8 *)&wholemsg[E_BUF_SIZE*i], E_BUF_SIZE);

4. recv(sn, (_u8 *)recvBuf, sizeof(recvBuf));

이렇게 통신 중에 가끔 2번 connect 함수 호출 때 SOCK_OK가 아닌 값이 리턴 될 때가 있는데, 다음의 3종류입니다.

#define SOCKERR_SOCKMODE (SOCK_ERROR - 5) ///&lt; Invalid socket mode for socket operation.
#define SOCKERR_PORTZERO (SOCK_ERROR - 11) ///&lt; Port number is zero
#define SOCKERR_TIMEOUT (SOCK_ERROR - 13) ///&lt; Timeout occurred

이 중에서 SOCKERR_TIMEOUT을 제외하고 SOCKERR_SOCKMODE, SOCKERR_PORTZERO가 리턴되는 상황이 잘 이해가 안됩니다.

첫째, 1번 항목의 socket 생성 시에 protocol(setSn_MR)이나 port(setSn_PORT) 설정이 안된 경우
→ socket 함수에서 에러를 리턴했어야 하는게 아닌지?

둘째, 1번 항목의 socket 생성 시에 protocol(setSn_MR)이나 port(setSn_PORT) 설정은 정상적이었으나 2번 항목으로 넘어오면서 변경된 경우
→ protocol과 port는 레지스터에 쓰여지는 값인데, 변경될 수 있는 요인이 어떤 것인지?

혹은 위에 2가지 경우 외에 SOCKERR_SOCKMODE, SOCKERR_PORTZERO가 리턴될 수 있는 상황이 어떤 것인지 궁금합니다.

## Replies

### Reply 1 by hjjeon0608, 2015-02-12

안녕하세요.

먼저 SOCKERR_SOCKMODE 발생 이유는 connect 함수는 TCP 모드일 때만 실행 되어야 하는데 해당socket이 TCP mode가 아닌UDP로 open 되었거나 IPRAW 또는 MACRAW로 open 되었을 경우 이 에러가 발생합니다.

두번째 SOCKERR_PORTZERO발생 이유는 destination port를 parameter로 입력하여 connect함수를 호출하는데 이 port번호가 0일경우 발생합니다. 자신의 port번호가 아니라 server의 port번호입니다.

감사합니다.

---

Source: https://maker.wiznet.io/forum/10833
