files/en-us/web/api/rtcicecandidate/protocol/index.md
{{APIRef("WebRTC")}}
The {{domxref("RTCIceCandidate")}} interface's read-only protocol property is a string
which indicates whether the candidate uses {{Glossary("UDP")}} or {{Glossary("TCP")}} as its transport protocol.
The protocol field's value is set from the candidateInfo options object passed to the {{domxref("RTCIceCandidate.RTCIceCandidate", "RTCIceCandidate()")}} constructor.
You can't specify the value of protocol directly in the options object, but its value is automatically extracted from the object's candidate a-line, if it's formatted properly.
protocol is null by default if not specified properly in the SDP, but this is an error condition and will result in a thrown exception when you call {{domxref("RTCPeerConnection.addIceCandidate()")}}.
A string that indicates what network protocol the candidate uses:
tcp
udp
[!NOTE] If
protocolisnull— andprotocolis supported by the {{Glossary("user agent")}} — passing the candidate to {{domxref("RTCPeerConnection.addIceCandidate", "addIceCandidate()")}} will fail, throwing anOperationErrorexception.
Here's an example candidate a-line from an ICE transaction:
a=candidate:4234997325 1 udp 2043278322 192.0.2.172 44323 typ host
The third field, "udp", is the protocol type, indicating that the
candidate would use the UDP transport protocol.
This code snippet examines the value of protocol to decide if it should
look at the value of {{domxref("RTCIceCandidate.tcpType", "tcpType")}} to see if it's a
simultaneous-open (S-O) candidate.
if (candidate.protocol === "tcp") {
if (candidate.tcpType === "so") {
adjustForSimultaneousOpen(candidate);
}
}
{{Specifications}}
{{Compat}}