<HTML><HEAD>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
<STYLE id=mysingle_style type=text/css>.search-word {
        BACKGROUND-COLOR: #ffee94
}
P {
        MARGIN-BOTTOM: 5px; FONT-SIZE: 10pt; FONT-FAMILY: 맑은 고딕, arial; MARGIN-TOP: 5px
}
TD {
        MARGIN-BOTTOM: 5px; FONT-SIZE: 10pt; FONT-FAMILY: 맑은 고딕, arial; MARGIN-TOP: 5px
}
LI {
        MARGIN-BOTTOM: 5px; FONT-SIZE: 10pt; FONT-FAMILY: 맑은 고딕, arial; MARGIN-TOP: 5px
}
BODY {
        FONT-SIZE: 10pt; FONT-FAMILY: 맑은 고딕, arial; MARGIN: 10px; LINE-HEIGHT: 1.4
}
</STYLE>

<META content=IE=5 http-equiv=X-UA-Compatible>
<META content=IE=5 http-equiv=X-UA-Compatible>
<STYLE id=knox_style type=text/css>P {
        MARGIN-BOTTOM: 5px; FONT-SIZE: 10pt; FONT-FAMILY: 맑은 고딕, arial; MARGIN-TOP: 5px
}
</STYLE>

<META content=IE=5 http-equiv=X-UA-Compatible>
<META name=GENERATOR content="MSHTML 11.00.9600.18698"></HEAD>
<BODY>
<P></P>
<P> </P>
<P>Hi,</P>
<P> </P>
<P>I'm trying to test libwebsocket with example by Ren-Wei Luo at StackOverflow.</P>
<P> </P>
<P>I cannot connet client to server. I don't know why. did I omit something?</P>
<P>The example is based on V1.6 so I change some for V2.2.</P>
<P> </P>
<P>What is wrong with my code? </P>
<P>and where can I get some detailed explanation(not just api..) about extension and connection station machine in libwebsocket?</P>
<P> </P>
<P>Thank for your help..</P>
<P> </P>
<P>------------------------------------------------------------------------------------------------------------------</P>
<P><STRONG>[ERROR]</STRONG></P>
<P>[2017/06/26 21:32:51:6102] INFO:  LWS_DEF_HEADER_LEN    : 4096<BR>[2017/06/26 21:32:51:6102] INFO:  LWS_MAX_PROTOCOLS     : 5<BR>[2017/06/26 21:32:51:6102] INFO:  LWS_MAX_SMP           : 1<BR>[2017/06/26 21:32:51:6103] INFO:  SPEC_LATEST_SUPPORTED : 13<BR>[2017/06/26 21:32:51:6103] INFO:  sizeof (*info)        : 408<BR>[2017/06/26 21:32:51:6103] INFO:  SYSTEM_RANDOM_FILEPATH: '/dev/urandom'<BR>[2017/06/26 21:32:51:6103] INFO:  default timeout (secs): 20<BR>[2017/06/26 21:32:51:6103] INFO:  mem: context:          4768 bytes (672 ctx + (1 thr x 4096))<BR>[2017/06/26 21:32:51:6103] INFO:  mem: http hdr rsvd:   30944 bytes (1 thr x (4096 + 3640) x 4))<BR>[2017/06/26 21:32:51:6103] INFO:  mem: pollfd map:       8192<BR>[2017/06/26 21:32:51:6104] INFO:  Proxy 168.219.61.252:8080<BR>[2017/06/26 21:32:51:6104] INFO:  LWS_MAX_EXTENSIONS_ACTIVE: 2<BR>[Main] context created.<BR>[2017/06/26 21:32:51:6104] INFO: lws_protocol_init<BR>[2017/06/26 21:32:51:6105] INFO: lws_header_table_attach: wsi 0x1beea20: ah (nil) (tsi 0, count = 0) in<BR>[2017/06/26 21:32:51:6105] INFO: lws_header_table_attach: did attach wsi 0x1beea20: ah 0x1bf4400: count 1 (on exit)<BR>[Main] wsi create success.<BR><SPAN style="COLOR: #0000ff">[2017/06/26 21:32:52:5709] INFO: closing conn at LWS_CONNMODE...SERVER_REPLY<BR>[2017/06/26 21:32:52:5709] INFO: reason: read failed<BR>[Main Service] Connect with server error.</SPAN><BR>[2017/06/26 21:32:52:5709] INFO: lws_close_free_wsi: real just_kill_connection: 0x1beea20 (sockfd 6)<BR>[2017/06/26 21:32:52:5709] INFO: lws_same_vh_protocol_remove: removing same prot wsi 0x1beea20<BR>[2017/06/26 21:32:52:5710] INFO: ah det due to close<BR>[2017/06/26 21:32:52:5710] INFO: lws_header_table_detach: wsi 0x1beea20: ah 0x1bf4400 (tsi=0, count = 1)<BR>[2017/06/26 21:32:52:5710] INFO: lws_header_table_detach: wsi 0x1beea20: ah 0x1bf4400 (tsi=0, count = 0)</P>
<P>------------------------------------------------------------------------------------------------------------------------------------------------------------</P>
<P><STRONG>[client.c]</STRONG></P>
<P>#include <stdio.h><BR>#include <stdlib.h><BR>#include <string.h><BR>#include <unistd.h><BR>#include <signal.h><BR>#include <libwebsockets.h></P>
<P>#define KGRN "\033[0;32;32m"<BR>#define KCYN "\033[0;36m"<BR>#define KRED "\033[0;32;31m"<BR>#define KYEL "\033[1;33m"<BR>#define KBLU "\033[0;32;34m"<BR>#define KCYN_L "\033[1;36m"<BR>#define KBRN "\033[0;33m"<BR>#define RESET "\033[0m"</P>
<P>static int destroy_flag = 0;<BR>static int connection_flag = 0;<BR>static int writeable_flag = 0;</P>
<P>static void INT_HANDLER(int signo) {<BR>    destroy_flag = 1;<BR>}</P>
<P>struct session_data {<BR>    int fd;<BR>};</P>
<P>struct pthread_routine_tool {<BR>    struct lwscontext *context;<BR>    struct lws *wsi;<BR>};</P>
<P>static int websocket_write_back(struct lws *wsi_in, char *str, int str_size_in)<BR>{<BR>    if (str == NULL || wsi_in == NULL)<BR>        return -1;</P>
<P>    int n;<BR>    int len;<BR>    char *out = NULL;</P>
<P>    if (str_size_in < 1)<BR>        len = strlen(str);<BR>    else<BR>        len = str_size_in;</P>
<P>    out = (char *)malloc(sizeof(char)*(LWS_SEND_BUFFER_PRE_PADDING + len + LWS_SEND_BUFFER_POST_PADDING));<BR>    //* setup the buffer*/<BR>    memcpy (out + LWS_SEND_BUFFER_PRE_PADDING, str, len );<BR>    //* write out*/<BR>    n = lws_write(wsi_in, out + LWS_SEND_BUFFER_PRE_PADDING, len, LWS_WRITE_TEXT);</P>
<P>    printf(KBLU"[websocket_write_back] %s\n"RESET, str);<BR>    //* free the buffer*/<BR>    free(out);</P>
<P>    return n;<BR>}</P>
<P> </P>
<P>static struct lws_protocols protocols[] = {<BR>    {<BR>        "dumb-increment-protocol",<BR>        ws_service_callback,<BR>        sizeof(struct session_data),<BR>        10,<BR>    },<BR>    {NULL, NULL, 0, 0}<BR>};</P>
<P>static const struct lws_extension exts[] = {<BR>    {<BR>        "permessage-deflate",<BR>        lws_extension_callback_pm_deflate,<BR>        "permessage-deflate; client_no_context_takeover"<BR>    },<BR>    {<BR>        "deflate-frame",<BR>        lws_extension_callback_pm_deflate,<BR>        "deflate_frame"<BR>    },<BR>    { NULL, NULL, NULL /* terminator */ }<BR>};</P>
<P> </P>
<P>int main(void)<BR>{<BR>    //* register the signal SIGINT handler */<BR>    struct sigaction act;<BR>    act.sa_handler = INT_HANDLER;<BR>    act.sa_flags = 0;<BR>    sigemptyset(&act.sa_mask);<BR>    sigaction( SIGINT, &act, 0);</P>
<P>    struct lws_context_creation_info info;<BR>    struct lws_context *context;<BR>    struct lws_client_connect_info i;<BR>    struct lws *wsi = NULL;</P>
<P>    memset(&info, 0, sizeof info);</P>
<P>    lws_set_log_level(10, NULL);</P>
<P>    info.port = CONTEXT_PORT_NO_LISTEN;<BR>    info.iface = NULL;<BR>    info.protocols = protocols;<BR>    info.ssl_cert_filepath = NULL;<BR>    info.ssl_private_key_filepath = NULL;<BR>    info.extensions = exts;<BR>    info.gid = -1;<BR>    info.uid = -1;<BR>    info.options = 0;</P>
<P>    context = lws_create_context(&info);<BR>    printf(KRED"[Main] context created.\n"RESET);</P>
<P>    if (context == NULL) {<BR>        printf(KRED"[Main] context is NULL.\n"RESET);<BR>        return -1;<BR>    }</P>
<P>    memset(&i, 0, sizeof(i));<BR>    i.port = 5000;<BR>    char path[30]={0};<BR>    sprintf(path, "/");<BR>    i.path=path;<BR>    i.context = context;<BR>    i.ssl_connection = 0;   // use_ssl<BR>    i.address = "10.251.194.23";<BR>    i.host = "10.251.194.23";<BR>    i.origin = "10.251.194.23";<BR>    i.ietf_version_or_minus_one = -1;<BR>    i.protocol = "dumb-increment-protocol";<BR>    i.pwsi = &wsi;</P>
<P>    lws_client_connect_via_info(&i);</P>
<P>    if (wsi == NULL) {<BR>        printf(KRED"[Main] wsi create error.\n"RESET);<BR>        return -1;<BR>    }<BR>    printf(KGRN"[Main] wsi create success.\n"RESET);</P>
<P>    lws_callback_on_writable(wsi);</P>
<P>    while(!destroy_flag)<BR>    {<BR>        lws_service(context, 50);<BR>    }</P>
<P>    lws_context_destroy(context);<BR>    return 0;<BR>}</P>
<P> </P><table id=bannersignimg><tr><td><p> </p>
</td></tr></table><table id=confidentialsignimg><tr><td><p><img style="border: 0px solid currentColor; border-image: none; width: 520px; height: 144px; display: inline-block;" unselectable="on" data-cui-image="true" src="cid:cafe_image_0@s-core.co.kr"> </p>
</td></tr></table></BODY></HTML><img src='http://ext.samsung.net/mail/ext/v1/external/status/update?userid=yjanna.jung&do=bWFpbElEPTIwMTcwNjI2MTI0OTEyZXBjbXMxcDVjMjhkYTVjMDc3YWI2NjY2NmE2MDg2ZmRmMjM5OGRiNyZyZWNpcGllbnRBZGRyZXNzPWxpYndlYnNvY2tldHNAbWwubGlid2Vic29ja2V0cy5vcmc_' border=0 width=0 height=0 style='display:none'>