แจแแกแแแแแ
แฉแแแแ แแแแแแแแ
แ แแแแ แช แแแกแ แแแแแแแชแแแก แแแแแแแแ, แฉแแแ แแแแแแฌแงแแแขแแ แแฃแแขแแแแแแแแจแแแแ แแแแแจแแก แแแ แขแแ แแแ แแแขแแ แแแขแจแ แแ แแแแ แฉแแแ
แแฃแจแแแแก Teeworlds แแ แแฃแแแ แจแ
แฉแแแ แแแแแแฌแงแแแขแแ แแแแแแแงแแแแ แแก แแ แแแฅแขแ แแฅแกแแแ แแแแแขแแแแกแแแแก แแแแแแ แแแแแฌแงแแแขแแแแแแแ แฅแกแแแแก แแแแแก แแแขแแ แแแขแจแ แแแแแขแแแแกแแแแก. แแก แฉแแแฃแแแแ แแ แแแแแแแ แจแแแแแแ แแแแแแ:
- XMLHttpแแแแฎแแแแ/แแแขแแแ, แแฃ แฅแกแแแแก แแแฌแแแ แจแแแแแแ แแฎแแแแ HTTP แแแแฎแแแแแแแกแแแ, แแ
- แแแ -แกแแแแขแแแ.
แแ แแแ แแแแแฌแงแแแขแ แแแแแฎแแแก แกแแ แแแ แแก แแแแแแแแแขแแก แฐแแกแขแแแแ แกแแ แแแ แแก แแฎแแ แแก แแ แแ แชแแ แแ แแ แแซแแแแ แกแแขแ แแแกแแแ แขแ แแ แแขแแแแแแ แแแแแงแแแแแแก
แแ แกแแแแแก แแแกแแแ แแแ - แแแแแแงแแแแ แฅแกแแแ แแ แแฃแแแ แแแแ:
แแฃแแชแ, แแแแก แแแแแขแแแแแ แกแแ แแฃแแ แแแฐแงแแแแ: แกแแแแ แแ แ WebRTC แแแแแขแแแ แจแแซแแแแก แแแแฃแแแแแชแแแก, แแแ แฃแแแ แจแแแกแ แฃแแแ แจแแแแ แแแแ แ แแฃแแ แฎแแแแก แฉแแแแ แแแแแ แแแกแแแแแจแแ แแแแแ, แ แแช แแแแแฎแแแก แ แแแแแแแแ แแแกแแแ แแฎแแ แแก แแ แแแฃแแก (แกแแกแแแแแแ แกแแ แแแ แก แแ แแ แ แแ แแแข แกแแ แแแ แก.
แแแแแแฃแ แจแแแแฎแแแแแจแ, แฉแแแ แแแกแฃแ แก แจแแแฅแแแแ แฅแกแแแแก API, แ แแแแแแช แแงแแแแแก WebRTC-แก แจแแแ, แแแแ แแ แ แแช แจแแแซแแแแ แแฎแแแก แแฅแแแแ UDP Sockets แแแขแแ แคแแแกแแแ, แ แแแแแกแแช แแ แกแญแแ แแแแ แแแแจแแ แแก แแแแงแแ แแแ.
แแก แแแแแชแแแก แกแแจแฃแแแแแแก แแแกแแ แแแแแแ WebRTCโแแ แแแแแแแชแแแก แแแแแกแแแแก แ แแฃแแ แแแขแแแแแแก แแแแแแแแแแก แแแ แแจแ (แ แแแแแก แจแแชแแแแช แ แแช แจแแแซแแแแ แแแแแแแแ แแแแแแแแ แฉแแแแก แแ แแแฅแขแจแ).
แแแแแแแแฃแ แ WebRTC
WebRTC แแ แแก API-แแแแก แแแแ แแแ, แ แแแแแแช แฎแแแแแกแแฌแแแแแแ แแ แแฃแแแ แแแจแ, แ แแแแแแช แฃแแ แฃแแแแแงแแคแก แแฃแแแ, แแแแแ แแ แแแแแแแแฃแ แ แแแแแชแแแแแแก peer-to-peer แแแแแชแแแแก.
แแแแจแแ แ แแแแแขแแแแแก แจแแ แแก แแงแแ แแแแ (แแแจแแแแช แแ, แแฃ แแ แกแแแแแก NAT แแ แ แแ แแ แแแ แแฎแแ แแก) STUN แแ/แแ TURN แกแแ แแแ แแแแก แแแแแงแแแแแแ แแแฅแแแแแแแก แกแแจแฃแแแแแแ, แ แแแแแกแแช แแฌแแแแแ ICE. แแแแแขแแแแแ แชแแแแก ICE แแแคแแ แแแชแแแก แแ แแ แฎแแก แแแ แแแแขแ แแแก SDP แแ แแขแแแแแแก แจแแแแแแแแแแกแ แแ แแแกแฃแฎแแก แกแแจแฃแแแแแแ.
แฒแแฃ! แ แแแแแแ แแแ แแแแแขแฃแ แ แแ แแแ แแฃแแแ? แแแแแแ แแแฎแกแแแ แ แแก แแแจแแแแก แแก แขแแ แแแแแแ:
Session Traversal Utilities for NAT (STUN) โ แแ แแขแแแแแ NAT-แแก แแแแ แแแก แแแแแ แแ แฌแงแแแแแก แแแกแแฆแแแแ (IP, แแแ แขแ) แแแแแชแแแแ แแแ แแแแแ แฐแแกแขแแแ แแแชแแแแกแแแแก. แแฃ แแก แแแแฎแแ แฎแแแก แแแแแแแแแก แจแแกแ แฃแแแแแก, แแแจแแ แแแแแขแแแแแก แจแแฃแซแแแแ แแแแแฃแแแแแแแแ แแแชแแแแแ แแแแแชแแแแแ แแ แแแแแแแแแ.แแแแแแแแแ แ แแแแแแแก แแแแแงแแแแแแ NAT-แแก แแแ แจแแแ (แฒแฒแฒแฒ แฒฃแฒแฒแฒแฒ) แแกแแแ แแแแแแงแแแแแ NAT แแแแแกแแกแแแแแแ, แแแแ แแ แแก แแแแก แแฎแแ แชแแแแแแก แแแแแชแแแแแแก แแแแแแแแแแ แแ แแฅแกแแก แแแจแแแแแแ, แ แแแแแแช แฎแแแฃแแแ แแ แแแ แแแแแขแแแแกแแแแก. แแก แแแแขแแแก แจแแงแแแแแแแก แแ แฃแคแ แ แซแแแ แแ แแแแกแแฎแแ แชแแแแแแแแ, แแแแ แ STUN (แ แแแแแ แแแ แแแแแแงแแแแแ แแแแแ แกแแแแแฃแแแแแชแแ แกแแกแแแก แแแแแแแแแแแจแ), แแแแ แแ แแแแฏแแ แแก แแ แแแแแ แแ แแแ แแแแขแแ.แแแขแแ แแฅแขแแฃแแ แแแแจแแ แแก แแแแงแแ แแแ (ICE) แแแแแแงแแแแแ แแ แ แแแแแขแแแแก แแแกแแแแแจแแ แแแแแ แกแแฃแแแแแกแ แจแแกแแซแแ แแแแแแแก แจแแกแแ แฉแแแแ, แ แแแแแแช แแคแฃแซแแแแ แฃแจแฃแแแแ แแแแแขแแแแแแแ แแแแแแจแแ แแแแก แจแแแแแแ แแแฆแแแฃแ แแแคแแ แแแชแแแก, แแกแแแ STUN แแ TURN แกแแ แแแ แแแแก แแแแแกแแแแ แ แ แแแแแแแแแก แแแแ แแแฆแแแฃแ แแแคแแ แแแชแแแก.แกแแกแแแก แแฆแฌแแ แแแแแแก แแ แแขแแแแแ (SDP) แแ แแก แแแแจแแ แแก แแ แฎแแก แแแ แแแแขแ แแแแก แแฆแฌแแ แแก แคแแ แแแขแ, แแแแแแแแแ, ICE แแแแแแแแขแแแ, แแฃแแขแแแแแแฃแ แ แแแแแแแแ (แแฃแแแ/แแแแแ แแ แฎแแก แจแแแแฎแแแแแจแ) แแ แ.แจ... แแ แ-แแ แแ แแแแแขแแแ แแแแแแแแก SDP แจแแแแแแแแแแก, แแแแ แ แแ แแแกแฃแฎแแแก SDP แแแกแฃแฎแแ. . แแแแก แจแแแแแ แแฅแแแแแ แแ แฎแ.
แแกแแแ แแแแจแแ แแก แจแแกแแฅแแแแแแ, แแแแแขแแแแแแ แฃแแแ แจแแแแ แแแแ แแแคแแ แแแชแแ, แ แแแแแกแแช แแแแฆแแแแ STUN แแ TURN แกแแ แแแ แแแแแแ แแ แแแชแแแแแ แแกแแแ แแ แแแแแแแแแ.
แแ แแแแแแ แแก แแ แแก, แ แแ แแแ แฏแแ แแ แแฅแแ แแแ แแแแแ แ แแแแฃแแแแแชแแแก แจแแกแแซแแแแแแแ, แแแแขแแ แแ แแแแแชแแแแแแก แแแกแแชแแแแแแ แฃแแแ แแ แกแแแแแแแก แแแฅแแแแแแ, แ แแแแแแช แแ แแ แแก แแแแแแแ: แกแแกแแแแแแ แกแแ แแแ แ.
แกแแกแแแแแแ แกแแ แแแ แ แจแแแซแแแแ แแงแแก แซแแแแแ แแแ แขแแแ, แ แแแแแ แแแกแ แแ แแแแแ แแ แแแแชแแแแ แแแแแชแแแแ แแแแแแแแแแ แแแแแขแแแแแก แจแแ แแก แฎแแแแก แฉแแแแ แแแแแแก แคแแแแจแ (แ แแแแ แช แแแฉแแแแแแแ แฅแแแแแ แแแชแแแฃแ แแแแแ แแแแจแ).
แแแแแ แขแแแแแฃแแ WebRTC แฎแแแแก แฉแแแแ แแแแแแก แแแแแแแ แแแแก แแแแแ แแแ
Teeworlds แฅแกแแแแก แแแแแแแก แแแแแฎแแแแ
Teeworlds แฅแกแแแแก แแ แฅแแขแแฅแขแฃแ แ แซแแแแแ แแแ แขแแแแ:
- แแแแแแขแ แแ แกแแ แแแ แแก แแแแแแแแแขแแแ แแ แ แแแแกแฎแแแแแแฃแแ แแ แแแ แแแแ.
- แแแแแแขแแแ แจแแแแแ แแแแแจแจแ แ แแแแแแแแ แกแแ แแแ แแแแ แแ แ-แแ แแแแ แแแแแแจแแ แแแแ, แ แแแแแแแแแ แแแแแแฃแแ แแแกแแแแซแแแแก แแฎแแแแ แแ แ แแแแแจแก แแ แแแ แแฃแแแ.
- แแแแแจแจแ แงแแแแ แแแแแชแแแแ แแแแแชแแแ แฎแแแแ แกแแ แแแ แแก แกแแจแฃแแแแแแ.
- แกแแแชแแแแฃแ แ แกแแแแแแกแขแ แ แกแแ แแแ แ แแแแแแงแแแแแ แงแแแแ แกแแฏแแ แ แกแแ แแแ แแก แกแแแก แจแแกแแแ แแแแแแแ, แ แแแแแแแช แแแฉแแแแแแแ แแแแแจแแก แแแแแแขแจแ.
แแแแแชแแแแ แแแชแแแแกแแแแก WebRTC-แแก แแแแแงแแแแแแก แฌแงแแแแแแ, แฉแแแ แจแแแแแซแแแ แแแแแแแขแแแแ แแแแแจแแก แกแแ แแแ แแก แแแแแแแแแขแ แแ แแฃแแแ แจแ, แกแแแแช แแแแแแขแ แแแแแแ แแแแก. แแก แแแ แจแแกแแซแแแแแแแแก แแแแซแแแแก...
แแแแจแแ แแ แกแแ แแแ แแแ
แกแแ แแแ แแก แแแแแแแก แแแแแแแแแแก แแฅแแก แแแ แแ แฃแแแ แแขแแกแแแ: แฉแแแ แจแแแแแซแแแ แแแแแแแแแกแแ แแแแแ แแแแแแแชแแ แกแขแแขแแแฃแ แ แจแแแแแ แกแแก แกแแฎแแ Github แแแแ แแแแแ แแ แฉแแแแก แกแแแฃแแแ แแแแ แแขแฃแ แแแ Cloudflare-แแก แฃแแแ, แ แแแแช แฃแแ แฃแแแแแแงแแคแ แกแฌแ แแค แฉแแแแขแแแ แแแแแก แแ แแแฆแแ แแ แแจแ แฃแคแแกแแ. แคแแฅแขแแแ แแแแ, แจแแแแแซแแแ แแแแแแแฌแงแแ แแกแแแ แแ แแฃ แแแแแแแแ แแแ แแ แแแแแจแ แแแแฃแแแ แฃแแ แแแฎแแแแ, แแแจแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแแแแ แแแแแชแแ แแ แแฅแแแแ แกแแญแแ แ.
แแฃแแชแ, แแแแกแแแแแก, แ แแ แกแแกแขแแแ แแแฃแจแแแก, แฉแแแ แแแแแ แฃแแแ แแแแแแแงแแแแ แแแ แ แแ แฅแแขแแฅแขแฃแ แ:
- แแ แแ แแ แแแขแ STUN แกแแ แแแ แ: แฉแแแ แแแแฅแแก แ แแแแแแแแ แฃแคแแกแ แแ แฉแแแแแ.
- แแแแแแฃแ แแ แแ TURN แกแแ แแแ แ: แแฅ แแ แแ แแก แฃแคแแกแ แแแ แแแแขแแแ, แแกแ แ แแ แฉแแแ แจแแแแแซแแแ แแแแแงแแแแ แกแแแฃแแแ แ แแ แแแแแแแฎแแแแ แกแแ แแแกแ. แกแแแแแแแแ แแ, แฃแแแขแแก แจแแแแฎแแแแแจแ, แแแแจแแ แ แจแแแซแแแแ แแแแงแแ แแแก STUN แกแแ แแแ แแแแก แกแแจแฃแแแแแแ (แแ แฃแแ แฃแแแแแงแแก แแแแแแแแ p2p), แแแแ แแ TURN แกแแญแแ แแ แ แแแแ แช แแแแฎแแแ แ แแแ แแแแขแ.
- แกแแแแแแแแแชแแแก แกแแ แแแ แ: แแแแแ แฉแแแ แแ แ แแกแแแฅแขแแกแแแ แแแแกแฎแแแแแแแ, แกแแแแแแแแแชแแ แแ แแ แแก แกแขแแแแแ แขแแแแแฃแแ. แ แแแ แแฅแแแแ แ แแแแฃแ แแ แแแกแฃแฎแแกแแแแแแแ แกแแกแแแแแแ แกแแ แแแ แ, แแแ แแแแฃแแฌแแแแ แแแแแแแแแแฃแแแ แแแแแแแชแแแแ. แฉแแแแก แจแแแแฎแแแแแจแ, แแแแจแแ แแก แแแแงแแ แแแแแแ แแฃแชแแแแแแแแ แแชแแ แ แ แแแแแแแแแก แแแแแชแแแแแแก แแแชแแแ.
- Teeworlds Master Server: แแแก แแงแแแแแแ แกแฎแแ แกแแ แแแ แแแ แแแแแแแแ แแ แกแแแแแแก แ แแแแแแแ แแแแกแแแแก แแ แแแแแแขแแแแก แแแแ แกแแฏแแ แ แกแแ แแแ แแแแก แแแกแแซแแแแแ. แแแฃแฎแแแแแแ แแแแกแ, แ แแ แแก แแ แแ แแก แกแแญแแ แ (แแแแแแขแแแก แงแแแแแแแแก แจแแฃแซแแแแ แฎแแแแ แแแฃแแแแจแแ แแแแ แกแแ แแแ แก, แ แแแแแก แจแแกแแฎแแแแช แแชแแแ), แแแ แแ แแฅแแแแ, แ แแ แแแแแแแจแแแแก แจแแแซแแแ แแแแแฌแแแแแแ แแแแฆแแ แแแแแจแแแจแ แจแแแแฎแแแแแ แแแแแแแแแแแแ.
แฉแแแ แแแแแแฌแงแแแขแแ แแแแแแแแงแแแแแแแ Google-แแก แฃแคแแกแ STUN แกแแ แแแ แแแ แแ แแแแแ แแแแแแแแแกแแ แแ แแ TURN แกแแ แแแ แ.
แแแแ แแ แ แแฃแแฅแขแแกแแแแก แฉแแแ แแแแแแแงแแแแ
- Teeworlds แกแแแแแแกแขแ แ แกแแ แแแ แ แแแแแ แแแแแ แซแแแแแ แแแ แขแแแแ: แ แแแแ แช แแแแแฅแขแแแแก แกแแ, แ แแแแแแช แจแแแชแแแก แแแคแแ แแแชแแแก (แกแแฎแแแ, IP, แ แฃแแ, แ แแแแแ, ...) แแแแแแฃแแ แแฅแขแแฃแ แ แกแแ แแแ แแก แจแแกแแฎแแ. แกแแ แแแ แแแ แแฅแแแงแแแแแ แแ แแแแแแฎแแแแก แกแแแฃแแแ แแแแแฅแขแก, แแแแแแขแแแ แแ แแฆแแแแ แแแแ แกแแแก แแ แแฉแแแแแแแ แแแก แแแแแแแจแแก. แฉแแแ แแกแแแ แแแฉแแแแแแ แกแแแก แแแแแแ แแแแ แแแ, แ แแแแ แช HTML, แ แแแ แแแแแแแจแแแแแ แฃแแ แแแแ แแแแฌแแแแฃแแแ แกแแ แแแ แแ แแ แแแ แแแแแ แแแแแจแจแ แแแแแแงแแแแแ.
- แกแแแแแแแแแชแแ แแญแแแ แแ แแ แแก แแแแแแจแแ แแแฃแแ แฉแแแแก แกแแแแขแแแแก แแแแฎแแ แชแแแแแแแกแแแ, แ แแแแแแช แแฆแฌแแ แแแแ แจแแแแแ แแแฌแแแจแ.
แกแแ แแแ แแแแก แกแแ แแแแแจแแก แจแแแแแ แแ แแแแแแ แแแแ แแแ
แกแแแแขแแแแก แแแแแ แแแ
แฉแแแ แแแแแแ แจแแแฅแแแแ API, แ แแแแแแช แแแฅแกแแแแแฃแ แแ แแฎแแแก แแฅแแแแ Posix UDP Sockets-แแแ, แ แแแ แแแแแแฃแแแแแ แแแแแงแแแแแ แกแแญแแ แ แชแแแแแแแแแแก แ แแแแแแแแ.
แฉแแแ แแกแแแ แแแแแแ แแแแแแฎแแ แชแแแแแ แกแแญแแ แ แแแแแแฃแแ, แ แแแแแแช แกแแญแแ แแ แแแแแชแแแแ แฃแแแ แขแแแแกแ แแแชแแแแกแแแแก แฅแกแแแจแ.
แแแแแแแแแ, แฉแแแ แแ แแแญแแ แแแแ แ แแแแฃแ แ แแแ แจแ แฃแขแแแแชแแ: แงแแแแ แแแแแขแแแ แแ แแก แแ แแกแ แแ แแแแแ โแแแ แขแฃแแแฃแ LAN-แแโ, แ แแแแแแช แแแแแแจแแ แแแฃแแแ Firebase แแแแแชแแแแ แแแแแก แแแแแ แแขแฃแ แแแแแแแแแแ.
แแแแขแแ, แฉแแแ แแ แแแญแแ แแแแ แฃแแแแแแฃแ แ IP แแแกแแแแ แแแแ: แฃแแแแแแฃแ แ Firebase แแแกแแฆแแแแก แแแแจแแแแแแแแแ (แแแแแแแก แกแแฎแแแแแแก แแกแแแแกแ) แกแแแแแ แแกแแ แแแแแขแแแแแแก แชแแแกแแฎแแ แแแแแขแแคแแชแแ แแแแกแแแแก แแ แแแแแแฃแแ แแแแแขแแแ แแแแแแแแ แแแแ แแแแญแแแก "แงแแแ" IP แแแกแแแแ แแแแก แแแแแแฃแ แแแกแแฆแแแก, แ แแแแแแช แฃแแแ แแแแ แแแแแก. แแก แแแแแแแแ แแแแแ แแชแฎแแแก แแแแแแแฃแ แ IP แแแกแแแแ แแแก แแแแแญแแแแก แแฃแชแแแแแแแแแก, แ แแช แแ แแขแ แแแแแแฃแ แ แแแแชแแแแ.
แแฅ แแ แแก แแแแแแแแฃแ แ API, แ แแแแแแช แฃแแแ แแแแแแฎแแ แชแแแแแ:
// Create and destroy a socket
int socket();
int close(int fd);
// Bind a socket to a port, and publish it on Firebase
int bind(int fd, AddrInfo* addr);
// Send a packet. This lazily create a WebRTC connection to the
// peer when necessary
int sendto(int fd, uint8_t* buf, int len, const AddrInfo* addr);
// Receive the packets destined to this socket
int recvfrom(int fd, uint8_t* buf, int len, AddrInfo* addr);
// Be notified when new packets arrived
int recvCallback(Callback cb);
// Obtain a local ip address for this peer key
uint32_t resolve(client::String* key);
// Get the peer key for this ip
String* reverseResolve(uint32_t addr);
// Get the local peer key
String* local_key();
// Initialize the library with the given Firebase database and
// WebRTc connection options
void init(client::FirebaseConfig* fb, client::RTCConfiguration* ice);
API แแ แแก แแแ แขแแแ แแ แแกแแแแกแ Posix Sockets API-แก, แแแแ แแ แแฅแแก แ แแแแแแแแ แแแแจแแแแแแแแแ แแแแกแฎแแแแแแ: แแแ แแแแก แแฆแ แแชแฎแแ, แแแแแแแแ แแแ IP-แแแแก แแแแแญแแแ แแ แแแ แแแชแ แแแแจแแ แแแ.
แแแ แแแแก แ แแแแกแขแ แแชแแ
แแแจแแแแช แแ, แแฃ แแแแแแแแ แแแแ แแ แแแ แแแ แแงแแแแแก แแ แแแแแแแแแแก I/O-แก, แแแแ แฃแแแ แแงแแก แ แแคแแฅแขแแ แแ แแแฃแแ, แ แแ แแแฃแจแแแก แแแ แแ แแฃแแแ แจแ.
แแแแก แแแแแแ แแก แแ แแก, แ แแ แแ แแฃแแแ แจแ แฆแแแแกแซแแแแแก แชแแแแ แแแแแแฃแแแ แแ แแแ แแแแกแแแ (แแฅแแแแ แแก JavaScript แแฃ WebAssembly).
แแจแแแแแฃแ แแแ แแแแจแ แจแแแแแซแแแ แแกแแแ แแแแแก แแแฌแแ แ
while(running) {
select(...); // wait for I/O events
while(true) {
int r = readfrom(...); // try to read
if (r < 0 && errno == EWOULDBLOCK) // no more data available
break;
...
}
...
}
แแฃ แฆแแแแกแซแแแแแก แแแ แงแฃแแ แฉแแแแแแแก แแแแแแฃแแแ, แแแจแแ แแก แฃแแแ แแแแแแแฅแชแแแ แจแแแแแแแแแ แแ:
auto cb = []() { // this will be called when new data is available
while(true) {
int r = readfrom(...); // try to read
if (r < 0 && errno == EWOULDBLOCK) // no more data available
break;
...
}
...
};
recvCallback(cb); // register the callback
แแแแแแฃแ แ IP แแแแแญแแแ
แฉแแแแก "แฅแกแแแจแ" แแแแแซแแแแก ID แแ แแ แแก IP แแแกแแแแ แแแแ, แแ แแแแ Firebase แแแกแแฆแแแแแ (แแกแแแ แแ แแก แกแขแ แแฅแแแแแ, แ แแแแแแแช แแกแ แแแแแแงแฃแ แแแ: -LmEC50PYZLCiCP-vqde
).
แแก แแแกแแฎแแ แฎแแแแแแ, แ แแแแแ แฉแแแ แแ แแแญแแ แแแแ IP-แแแแก แแแแแญแแแแก แแ แแแแ แฃแแแแแแฃแ แแแแก แจแแแแฌแแแแแก แแแฅแแแแแแ (แแกแแแ แแแแแแขแแก แแแแแจแแแก แจแแแแแ แแแแ แแแแแแ แแแ), แแแแ แแ แฎแจแแ แแ แกแแญแแ แแ แแแแแขแแแแแแก แแแแแขแแคแแชแแ แแแ แ แแชแฎแแแแ แแแแจแแแแแแแแ.
แแก แแ แแก แแฃแกแขแแ แแก, แ แแกแแแแกแแช แแแแแแงแแแแแ แคแฃแแฅแชแแแแ. resolve
ะธ reverseResolve
: แแแแแแแชแแ แ แแแแ แฆแแช แแฆแแแก แแแกแแฆแแแแก แกแขแ แแฅแแแแก แแแแจแแแแแแแแก (แแแแฎแแแ แแแแแก แจแแงแแแแแก แแ แซแแ แแแแแ แกแแ แแแ แแก แแแจแแแแแแ) แแ แจแแฃแซแแแ แแแกแ แแแแแงแแแแ IP แแแกแแแแ แแแ แจแแแ แแแแแงแแแแแแกแแแแก. แแแแแ แฉแแแ API แแกแแแ แแฆแแแก แแ แแแแจแแแแแแแแก แกแขแ แแฅแแแแก แแแชแแแแ แกแแแแ แขแแแแกแแแแก.
แแก แแกแแแแกแแ DNS-แแก แซแแแแแกแแแ, แแแแ แแ แจแแกแ แฃแแแแฃแแแ แแแแแแแแ แแแแ แแแแแแขแแ.
แแแฃ IP แแแกแแแแ แแแแแก แแแแแแ แแแ แแ แจแแแซแแแแ แกแฎแแแแแกแฎแแ แแแแแแขแแแก แจแแ แแก แแ แแฃ แกแแญแแ แแ แ แแแแ แกแแฎแแก แแแแแแแฃแ แ แแแแแขแแคแแแแขแแ แ, แแก แกแฎแแแแแแ แแ แฃแแแ แแแแแ แแ แแแฃแแ แแงแแก.
แแแ แแแชแ แแแแจแแ แ
UDP แแ แกแแญแแ แแแแก แแแแจแแ แก, แแแแ แแ แ แแแแ แช แแแแฎแแ, WebRTC แแแแแฎแแแก แฎแแแแ แซแแแ แแแแแแจแแ แแแแก แแ แแชแแกแก, แกแแแแ แแก แจแแซแแแแก แแแแแชแแแแ แแแแแชแแแแก แแ แแแแแขแแแก แจแแ แแก.
แแฃ แฉแแแ แแแกแฃแ แก แแแแแฌแแแแ แแแกแขแ แแฅแชแแแก แแแแแ แแแแ, (sendto
/recvfrom
แแแแแแแแฃแ แแแแแขแแแแแแแ แฌแแแแกแฌแแ แ แแแแจแแ แแก แแแ แแจแ), แแแจแแ แแแ แฃแแแ แจแแแกแ แฃแแแ "แแแ แแแชแ" (แแแแแแแแแแฃแแ) แแแแจแแ แ API-แจแ.
แแก แแ แแก แแก, แ แแช แฎแแแแ "แกแแ แแแ แกแ" แแ "แแแแแแขแก" แจแแ แแก แแแ แแแแฃแ แ แแแแฃแแแแแชแแแก แแ แแก UDP-แแก แแแแแงแแแแแแกแแก แแ แ แ แฃแแแ แแแแแแแแก แฉแแแแแ แแแแแแแแแแแ:
- แกแแ แแแ แแก แแแ แแแ
bind()
แแชแแแแแก แแแแ แแชแแฃแ แกแแกแขแแแแก, แ แแ แแแก แกแฃแ แก แแแแฆแแก แแแแแขแแแ แแแแแแแแฃแ แแแ แขแแ.
แแแแก แแแชแแแแ, แฉแแแ แแแแแแแฅแแแงแแแแ แฆแแ แแแ แขแก Firebase แกแแ แแแ แแก แแแกแแฆแแแแก แฅแแแจ แแ แแแแฃแกแแแแ แแแแแแแแแก แแแก แฅแแแฎแแจแ.
- แกแแ แแแ แแก แแแ แแแ
recvfrom()
, แแ แแแ แขแแก แแแแแกแแแแ แ แฐแแกแขแแแแ แจแแแแกแฃแแ แแแแแขแแแแก แแแฆแแแ.
แฉแแแแก แจแแแแฎแแแแแจแ, แฉแแแ แฃแแแ แจแแแแแแฌแแแ แแ แแแ แขแจแ แแแแแแแแแแ แแแแแขแแแแก แจแแแแแแแแแ แ แแแ.
แแแแแแฃแ แแแ แขแก แแฅแแก แแแแแกแ แ แแแ แแ แฉแแแ แแแแแขแแแ แฌแงแแ แแกแ แแ แแแแแจแแฃแแแแแก แแแ แขแแแก WebRTC แแแแแชแแแแ แแ แแแแแแก แแแกแแฌแงแแกแจแ, แ แแแ แแแชแแแแ, แ แแแแ แ แแแจแ แแแแแแแแแแแแแ แแฎแแแ แแแแแขแแก แแแกแแแแกแแก.
แแแ แ แแ แแ แแก แแแแแแแแแ, แแกแ แ แแ, แแฃ แแแแแขแแแ แแ แแ แแก, แฉแแแ แฃแแ แแแแ แแแแ แฃแแแแ -1 แแ แแแงแแแแแ errno=EWOULDBLOCK
.
- แแแแแแขแ แแฆแแแก แกแแ แแแ แแก IP-แก แแ แแแ แขแก แแแ แแแแฃแแ แแแ แ แกแแจแฃแแแแแแแแ แแ แแแ แแแก
sendto()
. แแก แแกแแแ แแฎแแแแก แจแแแ แแแ แก.bind()
, แจแแกแแแแแแกแแ แจแแแแแแแrecvfrom()
แแแแฆแแแก แแแกแฃแฎแก แชแแแกแแฎแแ แจแแกแ แฃแแแแแก แแแ แแจแ.
แฉแแแแก แจแแแแฎแแแแแจแ, แแแแแแขแ แแแ แแแแ แแฆแแแก แกแขแ แแฅแแแแก แแแแแแจแก แแ แแงแแแแแก แคแฃแแฅแชแแแก resolve()
IP แแแกแแแแ แแแก แแแกแแฆแแแแ.
แแ แแขแแแแ, แฉแแแ แแแฌแงแแแ WebRTC แฎแแแแก แฉแแแแ แแแแแแก, แแฃ แแ แ แแแแแขแแแ แฏแแ แแ แแ แแก แแแแแแจแแ แแแฃแแ แแ แแแแแแแแแ. แแ แแแแแแแแแ แแแแแขแแแแก แกแฎแแแแแกแฎแแ แแแ แขแแแแแ แแแแจแแ แแแ แแงแแแแแก แแแแแ WebRTC DataChannel-แก.
แฉแแแ แแกแแแ แแแกแ แฃแแแแ แแ แแแแ แแแแแ bind()
แ แแแ แกแแ แแแ แแ แจแแซแแแก แฎแแแแฎแแ แแแแแแจแแ แแแ แจแแแแแแจแ sendto()
แแฃ แ แแแแ แแแแแแแ แแแแฎแฃแ แ.
แกแแ แแแ แก แแชแแแแแแ แแแแแแขแแก แแแแจแแ แแก แจแแกแแฎแแ, แ แแแแกแแช แแแแแแขแ แฌแแ แก แแแแแก SDP แจแแแแแแแแแแก แกแแ แแแ แแก แแแ แขแแก แแแคแแ แแแชแแแก แฅแแแจ Firebase-แจแ แแ แกแแ แแแ แ แแแกแฃแฎแแแก แแฅ แแแแแกแ แแแกแฃแฎแแ.
แฅแแแแแ แแแชแแแฃแแ แแแแแ แแแ แแแแฉแแแแแแก แจแแขแงแแแแแแแแแแก แแแแแแแก แแแแแแแแก แกแแแแขแแก แกแฅแแแแกแแแแก แแ แแแ แแแแ แจแแขแงแแแแแแแแก แแแแแชแแแ แแแแแแขแแแแ แกแแ แแแ แแ:
แแแแแแขแกแ แแ แกแแ แแแ แก แจแแ แแก แแแแจแแ แแก แคแแแแก แกแ แฃแแ แแแแแ แแแ
แแแกแแแแ
แแฃ แแฅแแแแ แฌแแแแแแฎแแ, แแแแแ แแแแแขแแ แแกแแแ แแแแ แแแก แแแฅแแแแแแแจแ แแแแแฎแแ. แแแแแจแแก แแแแแจแ แจแแกแแซแแแแแแแ
แแแฎแแแแแฃแ แ แแแขแฉแ แแแแแแแแก แจแแ แแก
แฅแกแแแแก แแแแแแแแแแแก แแแแ แแแแแกแฃแคแแแ แแ แแก แฎแแแแแกแแฌแแแแแ แแฅ
แฌแงแแ แ: www.habr.com