> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XblMultiplayerSessionProperties

> XblMultiplayerSessionProperties

# XblMultiplayerSessionProperties

A set of properties associated with this session. Any player can modify these properties.

## Syntax

```cpp theme={null}
typedef struct XblMultiplayerSessionProperties {  
    const char** Keywords;  
    size_t KeywordCount;  
    XblMultiplayerSessionRestriction JoinRestriction;  
    XblMultiplayerSessionRestriction ReadRestriction;  
    uint32_t* TurnCollection;  
    size_t TurnCollectionCount;  
    const char* MatchmakingTargetSessionConstantsJson;  
    const char* SessionCustomPropertiesJson;  
    const char* MatchmakingServerConnectionString;  
    const char** ServerConnectionStringCandidates;  
    size_t ServerConnectionStringCandidatesCount;  
    uint32_t* SessionOwnerMemberIds;  
    size_t SessionOwnerMemberIdsCount;  
    XblDeviceToken HostDeviceToken;  
    bool Closed;  
    bool Locked;  
    bool AllocateCloudCompute;  
    bool MatchmakingResubmit;  
} XblMultiplayerSessionProperties  
```

### Members

*Keywords*\
Type: const char\*\*

A collection of keywords associated with the session (Optional, might be empty).

*KeywordCount*\
Type: size\_t

The number of keywords.

*JoinRestriction*\
Type: [XblMultiplayerSessionRestriction](/reference/live/xsapi-c/multiplayer_c/enums/xblmultiplayersessionrestriction)

Restricts who can join "open" sessions. (Has no effect on reservations, which means it has no impact on "private" and "visible" sessions.) Defaults to "none". If "local", only users whose token's DeviceId matches someone else already in the session and "active": true. If "followed", only local users (as defined above) and users who are followed by an existing (not reserved) member of the session can join without a reservation.

*ReadRestriction*\
Type: [XblMultiplayerSessionRestriction](/reference/live/xsapi-c/multiplayer_c/enums/xblmultiplayersessionrestriction)

Restricts who can read "open" sessions. (Has no effect on reservations, which means it has no impact on "private" and "visible" sessions.) Defaults to "none". If "local", only users whose token's DeviceId matches someone else already in the session and "active": true. If "followed", only local users (as defined above) and users who are followed by an existing (not reserved) member of the session can read without a reservation. The read restriction applies to sessions with "open" or "visible" visibility and determines who can read the session without an invite. The read restriction must be at least as accessible as the join restriction, i.e. 'joinRestriction' can't be set to "followed" without also setting 'readRestriction'."

*TurnCollection*\
Type: uint32\_t\*

A collection of session MemberIds indicating whose turn it is.

*TurnCollectionCount*\
Type: size\_t

The number of entries in the TurnCollection array.

*MatchmakingTargetSessionConstantsJson*\
Type: const char\*

A JSON string representing the target session constants.

*SessionCustomPropertiesJson*\
Type: const char\*

JSON string that specify the custom properties for the session. These can be changed anytime. When changing, call multiplayer\_service::write\_session to write the changes to the service.

*MatchmakingServerConnectionString*\
Type: const char\*

Force a specific connection string to be used. This is useful for session in progress join scenarios.

*ServerConnectionStringCandidates*\
Type: const char\*\*

The ordered list of connection strings that the session could use to connect to a game server. Generally titles should use the first on the list, but sophisticated titles could use a custom mechanism for choosing one of the others (e.g. based on load).

*ServerConnectionStringCandidatesCount*\
Type: size\_t

The number of entries in the ServerConnectionStringCandidates array.

*SessionOwnerMemberIds*\
Type: uint32\_t\*

Session MemberIds of owners of the session.

*SessionOwnerMemberIdsCount*\
Type: size\_t

The number of entries in the SessionOwnerMemberIds array.

*HostDeviceToken*\
Type: [XblDeviceToken](/reference/live/xsapi-c/multiplayer_c/structs/xbldevicetoken)

Device token of the host. Must match the "deviceToken" of at least one member, otherwise this field is deleted. If "peerToHostRequirements" is set and "host" is set, the measurement stage assumes the given host is the correct host and only measures metrics to that host.

*Closed*\
Type: bool

Controls whether a session is joinable, independent of visibility, join restriction, and available space in the session. Does not affect reservations. Defaults to false.

*Locked*\
Type: bool

If true, it would allow the members of the session to be locked, such that if a user leaves they are able to come back into the session but no other user could take that spot. Defaults to false.

*AllocateCloudCompute*\
Type: bool

Setting to true by a client triggers a XBOX Live Compute allocation attempt by MPSD. Defaults to false.

*MatchmakingResubmit*\
Type: bool

True if the match that was found didn't work out and needs to be resubmitted. Set to false to signal that the match did work, and the matchmaking service can release the session.

## Requirements

**Header:** multiplayer\_c.h

## See also

[multiplayer\_c](/reference/live/xsapi-c/multiplayer_c/multiplayer_c_members)


## Related topics

- [Multiplayer Session advanced topics](/services/xbox-services/multiplayer/mpsd/concepts/live-mpsd-details.md)
- [Multiplayer Session Directory overview](/services/xbox-services/multiplayer/mpsd/live-mpsd-overview.md)
- [XblMultiplayerSessionSessionProperties](/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayersessionsessionproperties.md)
- [XblMultiplayerSessionPropertiesSetKeywords](/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayersessionpropertiessetkeywords.md)
- [XblMultiplayerManagerGameSessionPropertiesJson](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagergamesessionpropertiesjson.md)
