๋ฐ˜์‘ํ˜•
๋‚ด ์ธ์ƒ์—์„œ ๋ฏฟ์„ ๊ฑด ์˜ค์ง ๋‚˜ ์ž์‹ ๋ฟ!

The only one you can truly trust is yourself.


๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ/๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ 8

epoll() ๋ฉ€ํ‹ฐ ์—์ฝ” ์„œ๋ฒ„

์ฑ… ๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ•˜๋Š”... ์ฒ˜์Œ์— select์„œ๋ฒ„์ฒ˜๋Ÿผ FDSET์—์„œ ์‚ฌ์šฉ์ž ๋ฆฌ์ŠคํŠธ ๋น„๊ตํ•ด์„œ ํ•˜๋Š” ๋ถ€๋ถ„์ด๋ž‘ ๋˜‘๊ฐ™์ด ํ–ˆ๋”๋‹ˆ ์ด์ƒํ•˜๊ฒŒ ๋˜์„œ userlist[] ๋ฐฐ์—ด ๋งŒ๋“ค๊ณ , usercount ๋ณ€์ˆ˜ ๋งŒ๋“ค์–ด์„œ ๋ฉ”์‹œ์ง€ ๋‚ ๋ ค์ค„ ๋•Œ userlist[] ๋’ค์ ธ์„œ ๋น„๊ตํ•ด์„œ ๋‚ ๋ฆฌ๋Š” ๊ฑธ๋กœ ์ˆ˜์ •. epoll()์€ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ๋Š” ์• ๋“ค๋งŒ ๋Œ๋ ค์ฃผ๋‹ˆ ์ด๋ฒคํŠธ๊ฐ€ ์—†๋Š” ์• ๋“ค์€ ๋‹น์—ฐํžˆ ์ด์ƒํ•œ ๊ฐ’์ด ๋“ค์–ด์žˆ๋‹ค. ๋‚œ ๋ฐ”๋ณด. ์•ฝ๊ฐ„ ๋ถˆ์•ˆํ–ˆ๋Š”๋ฐ ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋‹ค. IPv6 ๋ฒ„์ „๊ณผ IPv4 ๋ฒ„์ „ ๋‘˜ ๋‹ค ์™„๋ฃŒ! ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์ €๊ฑด '์ „์ฒด ์™ธ์น˜๊ธฐ' ๊ธฐ๋Šฅ์ด๊ตฌ๋‚˜!

IPv4์—์„œ IPv6๋กœ ๋„˜์–ด๊ฐ€๊ธฐ

๋น„์ œ์ด์˜ ๋„คํŠธ์› ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€์ด๋“œ(Beej's Guide to Network Programming)์— 4๋ฒˆ์งธ์— IPv4์—์„œ IPv6๋กœ ๋„˜์–ด๊ฐ€๊ธฐ๊ฐ€ ์žˆ๋‹ค. 4. Jumping from IPv4 to IPv6 1. ๋จผ์ € getaddrinfo()๋ฅผ ์‚ฌ์šฉํ•ด์„œ struct sockaddr ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค, ์†์œผ๋กœ ๊ตฌ์กฐ์ฒด ์ฒด์›Œ๋„ฃ์ง€๋ง๊ณ . ์ด๊ฑด IP ๋ฒ„์ ผ-์•„๊ทธ๋…ธ์Šคํ‹ฑ(IP ๋ฒ„์ ผ์„ ์•Œ ์ˆ˜ ์—†๋‹ค๋Š” ์ด๋ก ์ธ๊ฐ€?)์„ ์œ ์ง€์‹œ์ผœ์ฃผ๊ณ , ๊ทธ ๋‹ค์Œ ๋งŽ์€ ์ž‘์—…๋“ค์„ ์•ˆํ•ด๋„ ๋˜๊ฒŒ ํ•ด์ค˜. 2. IP๋ฒ„์ ผ์ด๋ž‘ ๊ด€๋ จ๋œ ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๊ฑฐ ๊ฐ™์€ ์ „๋ถ€ ์ฐพ์•„์„œ ๋„์šฐ๋ฏธ ํ•จ์ˆ˜๊ฐ€์ง€๊ณ  ๊ณ ์ณ. 3. AF_INET๋ฅผ AF_INET6๋กœ ๋ฐ”๊พผ๋‹ค. 4. PF_INET๋ฅผ PF_INET6๋กœ ๋ฐ”๊พผ๋‹ค. 5. INADDR_ANY assignments๋„ in6addr_any assignm..

๋”๋ธ”๋ฒ„ํผ๋“œ์›ํ˜•ํ VS ์›ํ˜•ํ

๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ๋”๋ธ” ๋”ํผ๋“œ ์จํ˜๋Ÿฌ ํ์™€ ์ธํ„ฐ๋„ท์— ๋Œ์•„๋‹ค๋‹ˆ๋Š” ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์†Œ์Šค๋ฅผ ์ปดํŒŒ์ผ ํ•ด์„œ ์†๋„ ๋น„๊ต. ํ…Œ์ŠคํŠธ ๋ฐฉ์‹ 1000๋ฐ”์ดํŠธ์˜ ํ๋ฅผ ์ƒ์„ฑํ•ด์„œ 1๋ฐ”์ดํŠธ์”ฉ ๋„ฃ๊ณ , (ํ์— ๋„ฃ์„ ๋ฐ”์ดํŠธ๋Š” i%256์œผ๋กœ ์–ธ์ œ๋‚˜ ํ…Œ์ŠคํŠธ ์†Œ์Šค๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ตœ์ ํ™” ํ•  ์ˆ˜ ์—†๋„๋ก ์ฒ˜๋ฆฌ) 1๋ฐ”์ดํŠธ์”ฉ ๋บ€๋‹ค. ์ด๊ฑธ 1์–ต๋ฒˆ ๋ฐ˜๋ณต ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ -_ -; ๋˜‘๊ฐ™์•„. ๋”๋ธ” ๋ฒ„ํผ๋“œ ์„œํ˜๋ผ ํ - 11์ดˆ. ์ผ๋ฐ˜ ์„œํ˜๋ผ ํ - 11์ดˆ. ์™œ์ง€? ์›์ธ์„ ๋ถ„์„ํ•ด๋ณธ ๊ฒฐ๊ณผ... ๋”๋ธ” ๋ฒ„ํผ๋“œ ์„œํ˜๋ผ ํ๋Š” ํ๊ฐ€ ๋„˜์น  ๋•Œ, ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ๋ฅผ ์•ˆํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ๊ฑฐ์ž„.ใ…‹ ๋”ฐ๋ผ์„œ 1๋ฐ”์ดํŠธ์”ฉ ๋„ฃ๊ณ  ๋นผ์„œ๋Š” ๊ทธ๋ƒฅ ์›ํ˜•ํ์™€ ๋™์ผํ•œ ์†๋„๊ฐ€ ๋‚˜์˜ด. ใ…Žใ…Žใ…Ž... ์‚ฝ์งˆ ํ…Œ์ŠคํŠธ ์˜€๊ตฌ๋‚˜

Double Buffered Circular Queue๋กœ ํŒจํ‚ท ์ฃผ๊ณ  ๋ฐ›๊ธฐ 2

Double Buffered Circular Queue๋ฅผ ์ด์šฉํ•ด์„œ ํŒจํ‚ท ์ฃผ๊ณ  ๋ฐ›๊ธฐ๋ฅผ ๊ณต๋ถ€ํ–ˆ๋‹ค. ๊ณ ๋ฏผํ•˜๊ณ  ํ…ŒํŠธ๋ฆฌ์Šคํ•˜๊ณ , ๋†€๊ณ  ๋ฐฅ๋จน๊ณ  TV๋ณด๊ณ  ์ฑ…๋ณด๊ณ , ๋ฐ–์— ๋‚˜๊ฐ”๋‹ค๊ฐ€, ์Œ๋ฃŒ์ˆ˜ ํ•˜๋‚˜ ๋นจ๊ณ ... ๊ทธ๋ ‡๊ฒŒ 3์ผ์„ ๋†€๋‹ค๊ฐ€ ๋จธ๋ฆฌ์— ๋ฒˆ๊ฐœ ๋งž์•„์„œ 1์‹œ๊ฐ„ ๋™์•ˆ ๋ฌดํ•œ๋„์ „ ๋ณด๋ฉด์„œ ์ฝ”๋”ฉํ–ˆ๋‹ค. ์˜์™ธ๋กœ ๊ฐ„๋‹จํžˆ ๋ฌธ์ œํ•ด๊ฒฐ >_= Q.GetSize() ){ // ๊ฐ€์ ธ์˜ฌ ํŒจํ‚ท ํฌ๊ธฐ๊ฐ€ ํ ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ํฌ๋ฉด Q.DeQ( (char*)&pkt, Q.GetDeqSize() ); // ๋””ํํ•˜๊ณ  } else { // ํํฌ๊ธฐ๊ฐ€ ๊ฐ€์ ธ์˜ฌ ํŒจํ‚ท ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์œผ๋ฉด recvMsgSize = recv( clntSocket, Q.GetEnqPos(), Q.GetDeqSize() - Q.GetSize(), 0); Q.Enq( recvMsgSize ); // ๋ถ€์กฑํ•œ ๋งŒํผ..

Double Buffered Circular Queue๋กœ ํŒจํ‚ท ์ฃผ๊ณ  ๋ฐ›๊ธฐ 1

์™€...๋‚˜... ๊ฑฐ์˜ 8์‹œ๊ฐ„ ๋ถ™์žก๊ณ  ๊ฒจ์šฐ ๊ฒจ์šฐ ๋Œ€์ถฉ ๋Œ์•„๊ฐ€๋Š” ์ •๋„ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ๋งŽ๋‹ค. ์ผ๋‹จ, ์ฒซ ๋ฒˆ ์งธ ๋ฌธ์ œ ๋ถ€ํ„ฐ..ใ… .ใ…  ์„œํ˜๋ผ ํ์˜ ๋‚จ์€ ๊ณต๊ฐ„์ด ๋ฐ›์„ ํŒจํ‚ท์˜ ์ตœ๋Œ€ ํฌ๊ธฐ ๋ณด๋‹ค ์ž‘์„ ๋•Œ... ์ด๊ฑฐ ๋”๋ธ” ๋ฒ„ํผ๋“œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ๊ฐ€ 1๋ฒˆ๋งŒ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ๋ฐ˜๋ฉด ๋ฉ”๋ชฐ ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ€๋”... ์•ž/๋’ค๊ฐ€ ์งค๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ํ์˜ ๋‚จ์€ ๊ณต๊ฐ„์ด ํŒจํ‚ท์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๊ฐ€ ์•ˆ๋  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๋ฌธ์ œ ์ž์ฒด๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋„๋ก cํ ์ตœ๋Œ€ํฌ๊ธฐ๋Š” 200. ํŒจํ‚ท ์ตœ๋Œ€ํฌ๊ธฐ๋Š” 128๋กœ ๋˜์–ด ์žˆ๋‹ค. ์ด๋Ÿด ๋•Œ ์•ž์ชฝ์œผ๋กœ ๋•ก๊ฒจ์ฃผ์–ด์•ผ ํ•˜์ง€๋งŒ, ๊ทธ๋Ÿฌ๋ฉด ์†๋„์˜ ์ด์ ์ด ์‚ฌ๋ผ์ง„๋‹ค. ๊ทธ๋ž˜์„œ ์ž„๊ธฐ์‘๋ณ€์œผ๋กœ ํ ํด๋ฆฌ์–ด ํ•ด์ค„๋•Œ ํ—ค๋“œ/ํ…Œ์ผ ์ธ๋ฑ์Šค๋ฅผ 0/0์œผ๋กœ ๋ฐ”๊พธ์–ด์ฃผ์—ˆ๋‹ค. ์–ด์ฐจํ”ผ ์•ž๋ถ€๋ถ„ ๋ชป ์“ฐ๋Š”๊ฑฐ๋‹ˆ๊นŒ. ์š”๊ฑด ์งˆ๋ฌธ ์‚ฌํ•ญ์œผ๋กœ ๋‚จ๊ฒจ๋‘๊ณ  ํ์— ๋ฐ›์€ ..

๋”๋ธ” ๋ฒ„ํผ๋ง๊ณผ ์›ํ˜• ๋ฒ„ํผ๋ง ์˜ˆ์ œ (Double Buffering and Circular Buffering Examples)

๋”๋ธ” ๋ฒ„ํผ๋ง (Double Buffering) ์–ผ์Œ ํŠธ๋ ˆ์ด (Ice cube trays) ๋‹น์‹ ์€ ์–ผ์Œ์ด ๋“ค์–ด์žˆ๋Š” ํ•œ๊ฐœ์˜ ํŠธ๋ ˆ์ด๋ฅผ (๋ƒ‰์žฅ๊ณ  ์•ˆ์—) ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์–ผ์Œ์ด ๊ฐ€๋“์ฐฌ ๋‹ค๋ฅธ ํ•œ ๊ฐœ๋Š” ์•„์ง ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค. ์ฒซ๋ฒˆ์งธ ํŠธ๋ ˆ์ด๊ฐ€ ํ……๋น„๊ฒŒ ๋˜๋ฉด, ๋‹น์‹ ์€ ๊ทธ ํŠธ๋ ˆ์ด์— ๋‹ค์‹œ ๋ฌผ์„ ์ฑ„์›Œ์„œ ์–ผ์Œ์ด ์–ผ๋„๋ก ๋งŒ๋“ค๊ณ , ๋‹ค๋ฅธ ํŠธ๋ ˆ์ด๋กœ๋ถ€ํ„ฐ ์–ผ์Œ์„ ๊ฐ€์ ธ์˜จ๋‹ค. 2์—ฐ๋ฐœ ์ƒท๊ฑด (A double-barreled shotgun) ํ•œ ๋ฐœ ์˜๊ณ , ๋˜ ํ•œ๋ฐœ ์œ๋‹ค. ๋ฟœ๋ฟœ~ ์• ์™„๋™๋ฌผ์šฉ ๋”๋ธ” ์‹๊ธฐ (A double bowl pet dish) ์šฐ๋ฆฌ๊ฐ€ ํ•œ์ชฝ์— ๋จน์ด๋ฅผ ์ฑ„์šฐ๋Š” ๋™์•ˆ ๊ณ ์–‘์ด๋Š” ๋‹ค๋ฅธ ์ชฝ ๊ฑธ ๋จน์„ ์ˆ˜ ์žˆ๋„๋ก ๋˜์–ด ์žˆ๋‹ค. ํŠธ๋ฆฌํ”Œ ๋ฒ„ํผ๋ง (Triple Buffering) ํฌ๋ฎฌ๋ผ ์› ํƒ€์ดํ„ฐ ๊ต์ฒด (Formula One tire changing) ์‚ฌ..

์ œํ•œ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ์—์ฝ” ์„œ๋ฒ„

ForkN ... ๊ณต๋ถ€์ค‘... ์ปดํŒŒ์ผ ํ•  ๋•Œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ... gcc -o test *.c ์ด๊ฑฐ ์œˆ๋„์šฐ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณต๋ถ€ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์€๋ฐ... ๋ฆฌ๋ˆ…์Šค๋กœ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ๋‹ค๋‹ˆ... ์ฉ (๋” ๊ฐ„๋‹จํ•ด์„œ ์ข‹๊ธด ํ•œ...๋ฐ... ใ…‹) ๊ทธ๋Ÿฐ๋ฐ Cygwin์œผ๋กœ ๋งŒ๋“ค๋‹ค ๋ณด๋‹ˆ๊น... ํ”„๋กœ์„ธ์Šค ์ฃฝ์ด๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•ด์•ผ๋˜๋ƒ... CTRL+C๋„ ์•ˆ๋จนํžˆ๋Š”๋Ž…... ใ… .ใ…  ํ˜น์‹œ ps๋ž‘ Kill์ธ๊ฐ€?! ํ—‰์Šค!!! ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด๊ฐ€ ๋˜๋„ค?! ใ…‹ใ…‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜ ์ฃฝ๋Š”๊ตฌ๋‚˜. ํ—ˆํ—ˆํ—ˆ...; ๊ทธ๋Ÿฌ๊ณ ๋ณด๋‹ˆ ๊ทธ๋ƒฅ ์ž‘์—…๊ด€๋ฆฌ์ž์—์„œ ํ•ด๋„ ๋˜๋Š” ๊ฑฐ์˜€์ž–์•„...? ๋ฐ”๋ณด...

Fast Byte Order ์—„์ฒญ ์˜ค๋ž˜๋œ ๋‚ด์šฉใ…‹

์ด์ œ๋Š” ์ด๋Ÿด ํ•„์š”๋„ ์—†์„ ๊ฒƒ ๊ฐ™์€๋ฐ ๊ทธ๋•Œ ๊ทธ ์‹œ์ ˆ์—” ์™œ ์ด๋Ÿฐ ๊ฑฐ์— ์˜ˆ๋ฏผํ–ˆ๋Š”์ง€ ใ…‹ใ…‹ใ…‹ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋žจ ์ œ์ž‘ํ•  ๋•Œ, #include ๋ฅผ ์ด์šฉํ•ด์„œ y = htons(x); ๋‚˜ y = htonl(x);๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ €๊ฒŒ ์–ผ๋งˆ๋‚˜ ๋Š๋ฆฐ ๊ฑธ๊นŒ? ํ•œ ๋ฒˆ ์ƒ๊ฐํ•ด๋ดค๋‹ค. /* Using Winsock2 normaly */ #include #include using namespace std; int main() { unsigned short x = 0x3399; unsigned short y; unsigned int a = 0xff0102ff; unsigned int b; cout

๋ฐ˜์‘ํ˜•